c# - ItemsControl ItemTemplate DataTemplate 触发器未触发
问题描述
我在这里几乎绝望,不幸的是找不到解决方案。我有一个ItemsControl
与一个DataTemplate
绑定的ObservableCollection
。PicDuinoModuleV2Ui
一旦IsTriggered
标志为真,我想更改Border
. 不幸的是,触发器不会触发。PropertyChanged
也是空的。
<ItemsControl Grid.Row="1" ItemsSource="{Binding ViewModel.Modules}" Margin="10">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border x:Name="Border1" BorderThickness="2" Background="WhiteSmoke" BorderBrush="Black" CornerRadius="5" Width="200" Height="200" Margin="5" Padding="5">
...
</Border>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=IsTriggered}" Value="True">
<Setter TargetName="Border1" Property="Background" Value="LightGreen"></Setter>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
public class MainWindowViewModel : INotifyPropertyChanged, IDisposable
{
public ObservableCollection<PicDuinoModuleV2Ui> Modules { get; } = new ObservableCollection<PicDuinoModuleV2Ui>();
/// <summary>
/// The PropertyChanged Eventhandler
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Raise/invoke the propertyChanged event!
/// </summary>
/// <param name="propertyName"></param>
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
public class PicDuinoModuleV2Ui : PicDuinoModuleV2, IPicDuinoModuleUiProperties
{
public bool IsTriggered
{
get => _isTriggered;
set
{
_isTriggered = value;
OnPropertyChanged();
}
}
private bool _isTriggered;
/// <summary>
/// The PropertyChanged Eventhandler
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Raise/invoke the propertyChanged event!
/// </summary>
/// <param name="propertyName"></param>
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
解决方案
你的PicDuinoModuleV2Ui
类没有实现INotifyPropertyChanged
接口。尝试添加接口。
public class PicDuinoModuleV2Ui : PicDuinoModuleV2, IPicDuinoModuleUiProperties, INotifyPropertyChanged
{
...
}
推荐阅读
- jquery - jQueryUI 可排序 - 整个列的占位符
- python - 在字符串切片中使用比较运算符
- angular - ctor 不是构造函数。Angular7 单元测试
- android - Android 内部测试与我的设备不兼容
- javascript - 停止循环迭代直到超时然后恢复
- excel - 从 Excel 数据列表创建 Outlook Skype 会议
- xml - 如何使用 xslt 合并两个兄弟姐妹
- javascript - 如何使用按钮使用 JavaScript 对数组进行计数?
- angular - 可观察数组 *ngFor 指令 Angular
- amazon-dynamodb - 如何在 dynamodb 中获取总行数?