Image 的 DataTrigger 不响应 WPF

DataTrigger for Image not responding WPF

我试图让我的图像上的 DataTrigger 在我的 ViewModel 中的布尔值发生更改时触发。图像控件的代码是:

<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;
        }

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

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

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

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

SetPropertyChanged("_TASI"); 

需要

SetPropertyChanged("TASI");

或更好

SetPropertyChanged(nameof(TASI));