首页 > 解决方案 > 图像的 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");
            }
        }

但是,似乎当布尔值从 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 中更改值时不会更改。

标签: c#wpfxamldata-bindingdatatrigger

解决方案


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

SetPropertyChanged("_TASI"); 

需要是

SetPropertyChanged("TASI");

或更好

SetPropertyChanged(nameof(TASI));

推荐阅读