我已经构建了一个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情况下正常工作,但不是代码构建的情况。任何人都可以提供建议吗?