【发布时间】:2019-09-17 08:04:02
【问题描述】:
我的问题是为什么 Textblock Background={Binding IsActive} 部分不刷文本块,但是 - 当我将列表框背景颜色绑定到 IsActive 时 - 列表框背景是红色的。我只需要为item.Activated 为false 的列表框中的每个项目着色。
这是我的代码:
Xaml:
<ListBox
Grid.Row="1"
Background="{Binding IsActive}"
ItemsSource="{Binding AllProjects}"
SelectedItem="{Binding SelectedProject}"
Margin="0 5">
<ListBox.ItemTemplate >
<DataTemplate >
<TextBlock Background="{Binding IsActive}">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} - {1}">
<Binding Path="OrderName" />
<Binding Path="OrderNumber" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
MVVM:
private Brush _isactive;
public Brush IsActive
{
get => _isactive;
set
{
_isactive = value;
RaisePropertyChanged("IsActive");
}
}
private void ColorBackground()
{
foreach (var item in AllProjects)
{
if (item.Activated == false)
{
IsActive = (Brush)new BrushConverter().ConvertFromString("Red");
}
}
}
【问题讨论】:
-
你违反了 MVVM 规则。您的视图模型具有
Brush类型的属性。这是错误的 - 这是一个表示方面,应该由视图处理。您的视图模型已经有一个属性bool Activated。您的视图应该定义一个DataTrigger并根据该属性值将背景设置为所需的颜色。
标签: c# wpf mvvm data-binding