2017-07-15 69 views
0

我已经构建了一个UserControl,其中包含一个DevExpress GridControl,它的GridColumns以“UCKit” UserControl,包括列规格)绑定到控件。其中一列绑定到ObservableCollection的Count属性,该属性是组成GridControl的ItemsSource的类的属性,并且不响应PropertyChanged通知,甚至不会响应通过调用grid.RefreshData进行的蛮力更新尝试)。我写了一个测试程序,它在xaml中使用简单的GridColumn声明,并且Count列正常工作,但我无法获取其GridColumns内置代码进行更新的网格。DevExpress网格:为xaml声明的网格列声明的属性工作通知,但不是用于编程式添加的网格列

下面是成功地更新XAML:

<dxg:GridControl Grid.Column="0" HorizontalAlignment="Stretch" Name="griddywiddy2" AutoGenerateColumns="None" 
        Grid.Row="2" Grid.ColumnSpan="4" VerticalAlignment="Stretch" ItemsSource="{Binding MyDataColl, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"> 
     <dxg:GridControl.View> 
      <dxg:TableView AllowPerPixelScrolling="True" ShowTotalSummary="True"/> 
     </dxg:GridControl.View> 
     <dxg:GridControl.Columns> 
      <dxg:GridColumn Header="Row Name" Width="Auto" FieldName="RowName"/> 
      <dxg:GridColumn Header="Count" Width="Auto" FieldName="Stringz.Count"/> 
     </dxg:GridControl.Columns> 
    </dxg:GridControl> 

并且不与XAML + C#代码(行名称更新计数不):

<dxg:GridControl Grid.Column="0" HorizontalAlignment="Stretch" Name="griddywiddy" AutoGenerateColumns="None" 
        Grid.Row="1" Grid.ColumnSpan="4" VerticalAlignment="Stretch" ItemsSource="{Binding MyDataColl, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"> 
     <dxg:GridControl.View> 
      <dxg:TableView AllowPerPixelScrolling="True" ShowTotalSummary="True"/> 
     </dxg:GridControl.View> 
    </dxg:GridControl> 

    private void InitializeColumns() 
    { 
     griddywiddy.Columns.Add(
      new DevExpress.Xpf.Grid.GridColumn() 
      { 
       Header = "Row Name", 
       Binding = new Binding("RowName") 
       { 
        Mode = BindingMode.TwoWay, 
        Converter = null 
       }, 
       Width = 100 
      }); 
     griddywiddy.Columns.Add(
      new DevExpress.Xpf.Grid.GridColumn() 
      { 
       Header = "Count", 
       Binding = new Binding("Stringz.Count") 
       { 
        Mode = BindingMode.OneWay, 
        Converter = null 
       }, 
       Width = 100 
      }); 
    } 

我的两个更新的方法,两者都适用于xaml声明的列和代码构建的Row Name列(在我的测试程序中称为按钮点击处理程序):

private void UpdBtn_Click(object sender, RoutedEventArgs e) 
    { 
     griddywiddy.RefreshData(); 
     griddywiddy2.RefreshData(); 
    } 

    private void UpdBtn2_Click(object sender, RoutedEventArgs e) 
    { 
     MyData incer = MyDataColl[0]; 
     incer.NotifyPropertyChanged("Stringz.Count"); 
     incer.NotifyPropertyChanged("RowName"); 
    } 

我真的很迷惑,为什么这个计数属性在xaml情况下正常工作,但不是代码构建的情况。任何人都可以提供建议吗?

回答

0

它引起了我的注意,在创建GridColumn(我做的失败)中使用Binding = new Binding(“Stringz.Count”)与设置GridColumn的FieldName =“Stringz.Count “(我在xaml中做了哪些工作。)因此,对于这些”嵌套“通知(需要复杂路径),请使用指定GridColumn的FieldName方法。

这个解决方案来自DevExpress的人们,顺便说一句,非常感谢他们!