我有一个 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;
}