c# - 图像的 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 中更改值时不会更改。
解决方案
您正在为错误的属性名称引发 PropertyChanged 事件。
SetPropertyChanged("_TASI");
需要是
SetPropertyChanged("TASI");
或更好
SetPropertyChanged(nameof(TASI));
推荐阅读
- c++ - 是否可以定义一个宏来定义枚举类和返回枚举元素计数的 GetCount() 方法?
- xslt-2.0 - 如何删除与属性关联的 Soap 命名空间
- reactjs - Reducer 更新它不应该访问的状态对象
- javascript - 在 Google 折线图中将单点设置为活动/显示点和工具提示
- amazon-web-services - CodePipeline 的 CodeDeploy 步骤,因为角色权限不足
- upload - 如何使用 ConnectApi.UserProfiles.setPhoto 为社区用户上传 base64 格式的个人资料照片
- excel - 对数据进行排序的 VBA 代码似乎突然忽略了某些列/单元格
- ios - 在视图之间传递数据时无法识别的选择器
- firebase - 我想每月自动更新firebase实时数据库中的子值
- excel - 使用 Range 对象的 AdvancedFilter 属性的替代方法