无法从另一个线程(WPF)绑定DataGridTextColumn属性

时间:2017-04-21 20:41:39

标签: c# wpf binding datagrid

我正在通过不同线程(任务)的绑定来更新DataGrid。

我没有更新列值的问题。

<DataGridTextColumn Header="NAME" MinWidth="100" Width="10*" Binding="{Binding name}" />

但是我的一些列也应该具有来自数据库的不同背景颜色。我无法更新背景属性。

<DataGridTextColumn Header="" Width="10">
                    <DataGridTextColumn.CellStyle>
                        <Style TargetType="DataGridCell">
                            <Setter Property="Background" Value="{Binding color}" />
                        </Style>
                    </DataGridTextColumn.CellStyle>
                </DataGridTextColumn>

我遇到了这个问题:

  

必须在与DependencyObject相同的线程上创建DependencySource

你能告诉我我需要做什么吗?

P.S。 Freeze()会有所帮助,但我认为这不是一种方法。

1 个答案:

答案 0 :(得分:0)

所以我通过转换器来解决它。

我做了新课

public sealed class ColorCodeConverter : IValueConverter
{
   public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
   {
      ...
   }

   public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
   {
      ...
   }
}

然后在App.xaml中将其作为资源连接

<local:ColorCodeConverter x:Key="ColorCodeConverter" />

在MainWindow.xaml中我有以下

<DataGridTextColumn Header="" Width="10">
    <DataGridTextColumn.CellStyle>
        <Style TargetType="DataGridCell">
            <Setter Property="Background" Value="{Binding C7, Converter={StaticResource ColorCodeConverter}}" />
        </Style>
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>

所以你只需要通过ViewModel绑定你的字符串即可。无需使用Freeze()等。