簡體   English   中英

ItemsControl ItemTemplate DataTemplate 觸發器未觸發

[英]ItemsControl ItemTemplate DataTemplate Trigger not firing

我在這里幾乎絕望,不幸的是找不到解決方案。 我有一個帶有DataTemplateItemsControl ,它綁定了PicDuinoModuleV2UiObservableCollection 一旦IsTriggered標志為真,我想更改Border的背景。 不幸的是,觸發器不會觸發。 PropertyChanged也是 null。

<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
{
  ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM