2

我正在构建一个应用程序来显示绑定到记录的 ObservableCollection 的数据网格,其中每条记录都有一个课程对象和一个结果对象的 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 事件并重置了我在数据网格上已有的过滤器。但这不是非常低效吗?刷新数据网格上的视图对该方法没有任何影响。

非常感谢朝着正确方向迈出的任何一步。试图阻止自己变灰:)

有想过在网格中获取列表的绑定表达式并更新它,但没有线索吗?

多谢你们

4

1 回答 1

1

首先确保 Record 对象实现 INotifyPropertyChanged 并且 Course 属性调用它。

resultToBrushConverter 中的转换器是否需要访问绑定对象的多个属性?如果它只依赖于 Course 而不是Course用作它的路径。

编辑

假设您确实有这些东西,您对 Fill 的绑定应该如下所示:-

<Ellipse Width="20" Height="20" Fill="{Binding Coarse, Converter={StaticResource resultToBrushConverter} }" Stroke="Black" StrokeThickness="1" />

既然绑定知道它监视 Coarse 属性,它应该在针对 Coarse 属性触发 PropertyChanged 事件时更新 Fill。

于 2009-10-15T12:10:04.920 回答