Datalight中Listbox DataTemplate中的Silverlight更新/触发IValueConverter

时间:2009-10-15 11:11:43

标签: silverlight data-binding datagrid ivalueconverter updatesourcetrigger

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

非常感谢正确方向的任何步骤。试图阻止自己再次变灰:)

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

谢谢你们

1 个答案:

答案 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。