ItemsControl ItemTemplate DataTemplate 触发器未触发

ItemsControl ItemTemplate DataTemplate Trigger not firing

我在这里几乎陷入绝望,不幸的是找不到解决方案。我有一个 ItemsControl 和一个 DataTemplate,其中 ObservableCollectionPicDuinoModuleV2Ui 是绑定的。一旦 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 class 没有实现 INotifyPropertyChanged 接口。 尝试添加接口。

public class PicDuinoModuleV2Ui : PicDuinoModuleV2, IPicDuinoModuleUiProperties, INotifyPropertyChanged
{
  ...
}