我正在构建一个应用程序来显示绑定到ObservableCollection of Records的数据网格,其中每个记录都有一个Course对象和一个ObservableCollection结果对象。
使用自动填充框更改课程。 结果集合显示在带有IValueConverter实现的列表框中,以根据当前所选课程的标准更改椭圆模板的颜色。
它在加载时效果很好,但是通过自动完成对课程选择的后续更新不会触发重新计算/刷新值转换器。
有没有办法在XAML中触发刷新。我添加了UpdateSource = Property更改为列表框的绑定 - 但这导致堆栈溢出(哈哈)。
以下是代码:
<data:DataGrid x:Name="MyDatGrid">
<data:DataGrid.Columns>
<data:DataGridTemplateColumn Header="Results">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ListBox ItemsSource="{Binding ListOfResults}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Ellipse Width="20" Height="20" Fill="{Binding Converter={StaticResource resultToBrushConverter} }" Stroke="Black" StrokeThickness="1" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
<data:DataGridTemplateColumn Header="Course" >
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border>
<input:AutoCompleteBox ItemsSource="{Binding Courses, Source={StaticResource coursesSource}}"/>
</Border>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
我设法在自动完成框上订阅了LostFocus事件,并重置了我在数据网格上已有的过滤器。但这不是非常低效吗? 刷新数据网格上的视图对该方法没有任何影响。
非常感谢正确方向的任何步骤。试图阻止自己再次变灰:)
是否想过在网格中获取列表的绑定表达并更新它,但是没有线索?
谢谢你们
答案 0 :(得分:1)
首先确保Record对象实现INotifyPropertyChanged,然后Course属性调用它。
resultToBrushConverter中的转换器是否需要访问绑定对象的多个属性?如果它仅依赖于课程而不是Course
作为其路径。
修改强>:
假设你确实有这些东西,你对Fill的绑定应该如下: -
<Ellipse Width="20" Height="20" Fill="{Binding Coarse, Converter={StaticResource resultToBrushConverter} }" Stroke="Black" StrokeThickness="1" />
现在绑定知道它监视Coarse属性,它应该在为Coarse属性触发PropertyChanged事件时更新Fill。