Это общее требование для преобразования логического значения в один из двух экземпляров произвольного типа.
Лично я считаю, что это лучший инструмент для работы: Универсальный преобразователь Bool To Value (но в этом мнении может быть некоторая погрешность)
Поместите экземпляр предоставленного конвертера в ресурсы вашего UserControl: -
<UserControl.Resources>
<local:BoolToBrushConverter x:Key="Highlighter" FalseValue="White" TrueValue="Yellow" />
</UserControl.Resources>
Теперь вы можете применить этот конвертер для привязки логического значения из ViewModel к свойству типа Brush
.
Однако у вас есть более серьезная проблема, как применить этот преобразователь к отдельной строке данных? DataGrid
не позволяет напрямую устанавливать привязку для каждой строки.
Предполагая, что вы не являетесь "без кода в представлении", вы можете сделать это с другим статическим ресурсом для хранения простого Binding
, а затем использовать событие сетки данных LoadingRow
, чтобы применить его к каждой загружаемой строке .
<UserControl.Resources>
<local:BoolToBrushConverter x:Key="Highlighter" FalseValue="White" TrueValue="Yellow" />
<Binding x:Key="RowBackgroundBinding" Path="yourBoolProperty" Converter="{StaticResource Highlighter}" />
</UserControl.Resources>
На сетке данных: -
<DataGrid x:Name="dg" LoadingRow="dg_LoadingRow" ...>
Затем в коде позади: -
private void dg_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.SetBinding(DataGridRow.BackgroundProperty, (Binding)Resources["RowBackgroundBinding"]);
}
Это установит привязку для каждой строки при загрузке.