绑定WPF DataGrid文本列的前景

Tok*_*okk 5 c# wpf binding datagrid converter

我尝试构建一个DataGrid,并且我想将TextColums的Foreground属性之一绑定到Date,如果Date是过去的话,它将变为红色。

这里是XAML:

<toolkit:DataGridTextColumn 
   Binding="{Binding Path=Prüfdatum, Converter={StaticResource TimestampToDateConverter}}"
   Header="Prüfdatum" 
   Foreground="{Binding Path=Prüfdatum, Converter={StaticResource TimestampToColorConverter},
   ConverterParameter=Prüfdatum}" />
Run Code Online (Sandbox Code Playgroud)

这是我的转换器:

    class TimestampToColorConverter: IValueConverter
{
    #region IValueConverter Member

    public object Convert(object value, Type targetType, 
           object parameter, System.Globalization.CultureInfo culture)
    {
        string Datum = value.ToString();
        int year = System.Convert.ToInt32(Datum.Substring(6, 4));
        int month = System.Convert.ToInt32(Datum.Substring(3, 2));
        int day = System.Convert.ToInt32(Datum.Substring(0, 2));
        int hour = System.Convert.ToInt32(Datum.Substring(11, 2));
        int minute = System.Convert.ToInt32(Datum.Substring(14, 2));
        int second = System.Convert.ToInt32(Datum.Substring(17, 2));
        DateTime Time = new DateTime(year, month, day, hour, minute, second);
        if (Time < System.DateTime.Now)
        {
            return Brushes.Red as Brush;
        }
        else
        {
            return Brushes.Black as Brush;
        }

    }

    public object ConvertBack(object value, Type targetType, 
         object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }

    #endregion
}
Run Code Online (Sandbox Code Playgroud)

我不知道出什么问题了,但是Converter甚至都没有校准(第一个Converter可以正常工作)。输出窗口显示以下内容:

System.Windows.Data错误:2:找不到目标元素的管理FrameworkElement或FrameworkContentElement。BindingExpression:Path =Prüfdatum; DataItem = null; 目标元素是
'DataGridTextColumn'(HashCode = 16187528); 目标属性为“前景”(类型为“画笔”)

希望你们能帮助我

谢谢

Pet*_*ber 6

DataGridTextColumn告诉DataGrid为该列中的每一行创建一个TextBlock。然后,DataGridTextColumn.Binding设置TextBlock.Text的绑定,每次创建新行和该行的新TextBlock时都会触发该绑定。

我不知道绑定是否曾经执行过,但是最多一次(即不是每一行):

Binding =“ {Binding Path =Prüfdatum,Converter = {StaticResource TimestampToDateConverter}}”

正确的解决方案是为该文本块创建样式,并为ForeGround定义绑定。这将针对生成的每个TextBlock执行。这里的挑战是要让TextBlock查找数据。可以通过相对绑定到可视树中的祖先DataGridRow来实现。DataGridRow.Item允许访问网格背后的数据:

<Window.Resources>
  <Style x:Key="ForegroundStyle" TargetType="TextBlock">
    <Setter Property="Foreground" 
      Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}, 
      Path=Item.Prüfdatum, 
      Converter={StaticResource TimestampToColorConverter}/>
  </Style>
</Window.Resources>

<DataGrid>
  <DataGrid.Columns>
    <DataGridTextColumn Binding="{Binding SomeData}" ElementStyle="{StaticResource ForegroundStyle}"/>
</DataGrid.Columns>
Run Code Online (Sandbox Code Playgroud)

复杂吧?我建议您阅读以下有关数据网格格式的详细文章:http : //www.codeproject.com/Articles/683429/Guide-to-WPF-DataGrid-formatting-using-bindings? msg=5037235#xx5037235xx

祝你好运,你需要它:-)


Rag*_*han 0

由于您已绑定到 DataGrid,因此不需要在 DataGridTextColumn 和 ConverterParameter 中进行“绑定”,因为您的转换器不使用该参数。尝试下面

\n\n
<toolkit:DataGridTextColumn  Header="Pr\xc3\xbcfdatum" Foreground="{Binding Path=Pr\xc3\xbcfdatum, Converter={StaticResource TimestampToColorConverter}}" />\n
Run Code Online (Sandbox Code Playgroud)\n