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));
我试图让我的图像上的 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));