问题描述
当我的 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>
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");