情况是这样的一个界面有两个DataGrid列是一样的,所以为了不写两遍我就写到一个UserControl中,然后通过UserControl绑定数据。
PS:绑定的数据源都是ObservableCollection
问题:如果DataGrid直接写在view中可以Add、Remove等都可以刷新,但是通用UserControl绑定失效了。
请大家帮忙看看是我写的方法不对,还是有什么机制要处理。
下面是UserControl绑定部分和依赖属性代码
<DataGrid ItemsSource="{Binding ElementName=controlView_TicketOrderList, Path=DataList}" BorderThickness="1" RowHeaderWidth="20" HeadersVisibility="All" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="False" SelectionMode="Single" GridLinesVisibility="All" HorizontalGridLinesBrush="{DynamicResource GrayBrush9}" VerticalGridLinesBrush="{DynamicResource GrayBrush9}">
#region 依赖属性 /// <summary> /// 数据列表 /// </summary> public static DependencyProperty DataListProperty = DependencyProperty.Register("DataList", typeof(ObservableCollection<CRefundTicketEx>), typeof(CVRefundTicketList)); #endregion #region 属性 /// <summary> /// 数据列表 /// </summary> public ObservableCollection<CRefundTicketEx> DataList { get { return GetValue(DataListProperty) as ObservableCollection<CRefundTicketEx>; } set { SetValue(DataListProperty, value); //OnPropertyChanged("DataList"); } } #endregion
应用代码
<ControlView:CVRefundTicketList Margin="{StaticResource TopMargin}" DataList="{Binding RefundTicketList}"/>
将ElementName=controlView_TicketOrderList这个去掉试试,直接绑定数据DataList就行了。
PS:DataGrid在ControlView:CVRefundTicketList里面,而数据RefundTicketList是一个数据列表(虽然你把ViewModel写成了Element列表来绑定),直接绑定列表中的数据即可。