【发布时间】:2015-12-18 11:44:04
【问题描述】:
我在 WPF 中将对象传递给转换器时遇到问题。
我的 DataGrid 看起来像:
<DataGrid x:Name="customTasksDataGrid" Margin="10,10,10,38" Grid.Column="1" IsReadOnly="True" AutoGenerateColumns="False">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="ToolTip">
<Setter.Value>
<TextBlock Text="{Binding Path=., Converter={StaticResource converter}, NotifyOnTargetUpdated=True}"/>
</Setter.Value>
</Setter>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding ID}"/>
<DataGridTextColumn Header="Klient" Binding="{Binding Client.Names}"/>
...
</DataGrid.Columns>
</DataGrid>
转换器:
public class DateToBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
CustomTask t = (CustomTask)value;
Console.WriteLine(t.ToString()); // HERE
...
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
运行我的 prog 标记行时抛出错误,我的 CustomTask t 对象为空。我做错了什么?
编辑:
按照 Vadim Martynov 的建议,我将转换器更改为:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return null;
CustomTask t = (CustomTask)value;
...
}
现在完美运行!谢谢
【问题讨论】:
-
如果你调用转换器会发生什么,即替换为:
客户端名称是否显示在工具提示中? -
@Stew52 no 在这种情况下转换器从不调用
-
它不会这样做,因为您已将其删除。但它是否显示了您的期望?即工具提示的数据上下文是您期望的吗?
标签: c# .net wpf datagrid ivalueconverter