【发布时间】:2013-08-30 05:04:15
【问题描述】:
可能是一个简单的,但我似乎无法让它工作,这是列表视图和绑定的 XAML;
<ListView
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
x:Name="lstTrackers"
ItemsSource="{Binding Path=MainWindowViewModel.TrackerCollection}"
HorizontalContentAlignment="Stretch">
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=LastTransmitted}" Value="True">
<Setter Property="Background" Value="Green"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=LastTransmitted}" Value="False">
<Setter Property="Background" Value="White"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock
Text="{Binding Path=Description}"
x:Name="listTextClick"
MouseLeftButtonUp="listTextClick_MouseLeftButtonUp"
HorizontalAlignment="Stretch"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
以及我尝试将其绑定到的属性;
public class TrackerViewModel : ViewModelBase
{
readonly Tracker _tracker;
public TrackerViewModel(Tracker tracker)
{
_tracker = tracker;
}
public bool LastTransmitted
{
get
{
return _tracker.lastTransmitted;
}
set
{
_tracker.lastTransmitted = value;
OnPropertyChanged("LastTransmitted");
}
}
}
然后我只是试图将布尔值设置为 true,我认为这会触发样式到 proc;
_trackerViewModel.LastTransmitted = true;
然而,似乎什么都没有发生。是否有一些我缺少的简单但必要的东西?
注意:我已经尝试将“true”更改为“True”,以防万一。
编辑1:似乎没有通知更改,这很奇怪,因为我确定它是。如果我将触发器更改为;
<Style x:Key="listBoxStyle" TargetType="{x:Type TextBlock}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=LastTransmitted}" Value="True">
<Setter Property="Background" Value="Green"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=LastTransmitted}" Value="False">
<Setter Property="Background" Value="Blue" ></Setter>
</DataTrigger>
</Style.Triggers>
<!--<Setter Property="Background" Value="Red"/>-->
</Style>
然后文本块都是蓝色的,如布尔值设置为 true 所示。但是,当它设置为 true 并通知属性时,没有任何变化。也许列表没有正确刷新?我确定它与 ObservableCollection 相关联。
编辑 2:在那张纸条上,事实证明我使用的是自定义列表; “线程绑定列表”。它可能不会从 OnNotify 更新..所以我将不得不尝试解决这个问题。
【问题讨论】: