图像的 DataTrigger 没有响应 WPF

问题描述

当我的 viewmodel 中的布尔值发生更改时,我试图让我的图像上的 DataTrigger 触发。图片控件的代码为:

<Image>
                                    <Image.Style>
                                        <Style targettype="Image">
                                            <Setter Property="Width" Value="15"/>
                                            <Setter Property="Height" Value="15"/>
                                            <Setter Property="Source" Value="{Binding CloseImage}"/>
                                            <Style.Triggers>
                                                <DataTrigger Binding="{Binding TASI}" Value="True">
                                                    <Setter Property="Source" Value="{Binding CheckImage}"/>
                                                </DataTrigger>
                                            </Style.Triggers>
                                        </Style>
                                    </Image.Style>
                                </Image>

viewmodel 代码是:

private bool _TASI;
        public bool TASI
        {
            get { return _TASI; }
            set
            {
                _TASI = value;
                SetPropertyChanged("_TASI");
            }
        }

不过好像bool从false变成true的时候,图像没有变化。该值通过异步方法更改:

public async void StartUpRoutine()
        {
            await Task.Run(() => PingServer());
            MessageBox.Show("Server Pinged");
        }

public void PingServer()
        {
            if (Directory.Exists(ServerAddress))
            {
                TASI = true;
                MessageBox.Show("Server Found");
            } 
            else
                TASI = false;
        }

我知道该目录存在,因为 MessageBox 弹出显示“找到服务器”。但是 DataTrigger 没有在我的 XAML 中触发。我可以看到 CloseImage 但看不到 CheckImage。如果我将其更改为 false:

<DataTrigger Binding="{Binding TASI}" Value="False">

然后我看到的是 CheckImage 而不是 CloseImage。所以图像源设置正确,当 viewmodel 中的值更改时,它们不会更改。

解决方法

您正在为错误的属性名称引发 PropertyChanged 事件。

<div class="container">
  <div class="block block-1">
      <img src="https://www.talkwalker.com/images/2020/blog-headers/image-analysis.png" alt="lorem">

  </div>
  <div class="block block-2">
    <h2>Two</h2>

  </div>
  <div class="block block">
    <h2>Three</h2>
   
  </div>
</div>

必须

SetPropertyChanged("_TASI"); 

或更好

SetPropertyChanged("TASI");