我已经构建了一个包含 DevExpress GridControl 的 UserControl,当“UCKit”(包含 UserControl 的各种参数,包括列规范)绑定到控件时,它以编程方式添加了 GridColumns。其中一列绑定到 ObservableCollection 的 Count 属性,该属性是构成 GridControl 的 ItemsSource 的类的属性,并且不响应 PropertyChanged 通知,甚至不响应通过调用 grid.RefreshData( )。我已经编写了一个在 xaml 中使用简单 GridColumn 声明的测试程序,并且 Count 列工作正常,但是我无法获取其 GridColumns 内置在代码中的网格进行更新。
这是成功更新的 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 声明的列和代码构建的行名称列,是(在我的测试程序中的按钮单击处理程序中调用):
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");
}
我真的很困惑为什么这个 Count 属性在 xaml 案例中正常工作,而不是在代码构建案例中。有人可以建议吗?