如何获取将组合框项目的背景颜色绑定到模型的布尔值属性?
在搜索并尝试后,我可以找出答案,但是我不确定这是正确的方法。似乎long了
* 注意:在起草这个问题的过程中,我已经找到了以下解决方案
我有一个正在使用的简单代码示例:
我有一个Model和ViewModel,例如:
public class YesNoModel
{
public string Name { get; set; }
public bool Value { get; set; }
}
public class ViewModel
{
public IEnumerable<YesNoModel> YesNoItems { get; set; }
public ViewModel()
{
var list = new List<YesNoModel>();
list.Add(new YesNoModel() { Name = "Yes", Value = true });
list.Add(new YesNoModel() { Name = "No", Value = false });
YesNoItems = list;
}
}
一个将布尔值转换为颜色的值转换器
public class BoolToBackgroundGrayConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if ((bool)value)
{
return Brushes.LightGray;
}
else
{
return Brushes.Transparent;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
XAML绑定到窗口中的组合框
<Window.Resources>
<local:BoolToBackgroundGrayConverter x:Key="BoolToBackgroundGrayConverter"/>
</Window.Resources>
<Window.DataContext>
<local:ViewModel />
</Window.DataContext>
<Grid>
<ComboBox ItemsSource="{Binding YesNoItems}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" Background="{Binding Value, Converter={StaticResource BoolToBackgroundGrayConverter}}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</Grid>
这是正确的方法吗?在Value Converter中对颜色进行硬编码似乎有些漫长,同时也感觉有些错误
答案 0 :(得分:0)
没有绑定转换器的替代方法可以是DataTrigger:
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Background" Value="Transparent"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Value}" Value="True">
<Setter Property="Background" Value="LightGray"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>