- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在将对象传递给 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;
...
}
现在它完美运行了!谢谢
最佳答案
下一段代码对我来说很好用:
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="ToolTipService.ToolTip" Value="{Binding Path=., Converter={StaticResource converter}}" />
</Style>
</DataGrid.RowStyle>
我还注意到您的代码中只有一个调用具有空值。下一次调用(如果您的绑定(bind)没有失败)将不会有空 CustomTask 值(当您实际调用工具提示时)并且会很好地 fork 。然后只需添加 if(t == null) return null;到您的转换器,一切都会正常工作。
public class DateToBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
CustomTask t = (CustomTask)value;
if(t == null)
return null; // or other default value
...
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
我认为这种行为的原因是 DataGrid 在没有数据和数据源的情况下在页面呈现和调用工具提示上呈现其整个模板。如果您通过我的第一个代码示例设置属性,则只有在绑定(bind)数据后才会进行渲染和转换器调用。
更新要在类似情况下操作隔离列,您可以更改此列的样式或模板而不是 RowStyle,如下例所示:
<DataGrid x:Name="customTasksDataGrid" ItemsSource="..." IsReadOnly="True" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding ID}"/>
<DataGridTextColumn Header="Klient" Binding="{Binding Name}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="ToolTipService.ToolTip">
<Setter.Value>
<TextBlock Text="{Binding Path=., Converter={StaticResource converter}}"/>
</Setter.Value>
</Setter>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
关于c# - WPF:将 datagridrow 对象传递给转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34354936/
跟踪DataGridRow.Item之后和 DataGridRow.IsNewItem属性,我发现:每个添加的项目(当 Source 为 ObservableCollection 时添加到 DataG
我在弄乱 DataGridRow 的 Background 时发现了一些奇怪的东西。 DataGridRow 的背景颜色显示为白色,如果打印它,您将得到以下输出: System.Console.Wri
我有一个 DataGrid并且我希望选定行和焦点行同步,即如果焦点行发生变化,则选定行发生变化,如果选定行发生变化,则它成为焦点行。 给定具有以下 XAML 的 WPF 窗口,如何同步焦点行和选定行?
我一直在尝试弄清楚如何将这种自定义行为放入数据网格中,而无需在网上搜索解决方案时仔细查看。 给定以下数据网格(为简洁起见删除了一些 xaml):
有没有办法使用 XAML 根据其中一个单元格的内容动态设置行的背景? 谢谢, 菲尔 最佳答案 您可以为行定义样式并使用 DataTrigger 更改颜色。像这样的东西:
我已经在这几天了,找不到解决方案,请帮忙。 我有一个 WPF 应用程序我有一个 DataGridCombobox 它里面有东西(参数列表)。我还可以将徒手键入的文本添加到组合框中,例如“测试”,如下图
我有一个具有交替行背景颜色的数据绑定(bind) DataGrid。我想根据单元格包含的数据对单元格进行不同的着色。我已经尝试过这个线程建议的解决方案 http://wpf.codeplex.com/
我目前正在设计我的应用程序 (WPF),我正在尝试更改 DatagridRow 的 IsSelected 的设计。 XAML:
我对 WPF 和 XAML 很陌生,所以我可能会以错误的方式解决这个问题。 我有一个使用 Entity Framework 绑定(bind)到数据源的 DataGrid。 当我向 DataGrid 添
我目前已将此方法设置为检测对 DataGrid 中每一行的双击: private void Row_DoubleClick(object sender, RoutedEventArgs e)
我正在制作一个 WPF 程序,该程序能够使用 for 循环将 DataGrid 中的行逐一着色为红色,我遇到了一些奇怪的事情.如果 DataGrid 有超过 40 行来自数据库表的数据,它不会为所有行
当鼠标离开一行时,我有一个鼠标离开事件 因此在处理程序中,我尝试获取与该行绑定(bind)的带下划线的项目 private void Row_Mou
我的数据网格上有一个样式来禁用基于属性绑定(bind)的 DataGridRow。这使得该行无法选择,这就是我想要的。但是,我仍然可以使用至少 2 种其他方式选择禁用的行。第一个是如果我在禁用行周围的
当鼠标离开一行时,我有一个鼠标离开事件 因此在处理程序中,我尝试获取与该行绑定(bind)的带下划线的项目 private void Row_Mou
我有 DataGrid 的 DataGridRow,如何从中获取各个列的值?请参阅下面的代码。 var itemsSource = MESearchDatagrid.ItemsSource as IE
我正在创建一个 DataGrid,其中的行具有 AlternatingRowBackground 属性。但是,行中的数据必须修改,这需要一些时间。 我正在尝试使行的背景颜色在初始化时显示为浅灰色。这是
我在将对象传递给 WPF 中的转换器时遇到了问题。 我的 DataGrid 看起来像:
我希望将我的 DataGrid 中行的选定样式从默认的深蓝色和白色文本更改为实际上取决于行中现有的前景颜色,如下所示:
我正在用 C# 创建一个 WPF 应用程序。在我的窗口中有一个 DataGrid。在网格中有 2 列。第一列仅包含字符串。在第二列中,我想显示我创建的用户控件。 UserControl(称为:Prod
我不明白为什么代码的第一部分不起作用,但第二部分却起作用。 第 1 部分
我是一名优秀的程序员,十分优秀!