0

我有一个 Silverlight 4 DataGrid,它的ItemsSource绑定到一个ObservableCollection。当我修改ObservableCollection的元素时,修改后的元素会正确显示在我的网格中,除了一的元素。此列与其他列的不同之处在于它是TemplateColumn并且它使用ValueConverter

该列的模板由一个简单的 stackPanel 组成,其中包括一个 Path 控件和一个 Label。并且 Label 在简单的 ValueConverter 的帮助下绑定到某个 Source 对象。

现在的问题是,当我修改属于 ObservableCollection 的某个元素时,网格的所有列都正确显示,除了上面描述的那一列。它只是保持不变 - 但是当我使用鼠标光标选择 DataGridCell 并再次单击它时,突然发生所需的刷新。

所以我想这是我在这里缺少的简单的东西,但我找不到它......

提前致谢 ..

编辑:

与此同时,我能够进一步定位问题:似乎在我修改了 ObservableCollection 的一个元素之后,属于我的网格中绑定到源的标签的相应 ValueConverter 根本没有被调用。当我在单元格内单击时,ValueConverter 会被调用。但它不会自动 - 那么我该如何实现呢?请帮忙 :)

编辑:

绑定:

<sdk:Label Content="{Binding Route.Legs, Converter={StaticResource IncomingTableRouteTripConverter}}" Margin="9,0,0,0" Style="{StaticResource TripLabelTemplate}" FontFamily="Arial" FontSize="10.667" Padding="0" Height="10" FontWeight="Bold" />

这是我的 ValueConverter 的代码:( 但我认为转换器的代码与我的问题没有任何关系,我只是为了完整起见将其发布在这里)

public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {

        string trip = "";

        if (value != null) {


            List<Leg> legs = (List<Leg>)value;

            if (legs.Count >= 1) {

                for (int i = 0; i <= legs.Count - 1; i++) {

                    trip += ((Leg)legs[i]).Start.ICAO + " - " + ((Leg)legs[i]).Stop.ICAO + " - ";
                }

                trip = trip.Substring(0, trip.Length - 2);
            }
        }

        return trip;
    }
4

2 回答 2

2

因为通知中的所有节点都Path需要就位,所以拥有的类Route和拥有的类都Legs需要实现INPC.

此外,如果您将项目添加到Legs列表中,自然不会更新任何内容,事实上,即使Legs属性的类型ObservableCollection<...>无关紧要,因为绑定引擎只关心INPC.

因此,如果您希望在集合更改时更新绑定,您需要在Legs每次以某种方式修改属性时触发属性更改(包括完全替换引用)。

于 2012-02-07T08:21:36.733 回答
0

如果你使用喜欢

Content="{绑定路径=参数转换器={StaticResource SomeConverter}}"

那么你的问题可能就解决了……

于 2012-02-07T08:25:16.557 回答