我有一个里面有图像的按钮。此按钮多次出现在数据网格上,用于显示行的状态。当用户单击该按钮时,它会将该行上的基础对象的状态更改为启用或禁用。这是按钮的样子:
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button CommandParameter="{Binding}" HorizontalAlignment="Center">
<Image Source="{Binding Converter={StaticResource EnableDisableConverter}}" Height="25" Width="25" />
</Button>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
转换器根据状态正确返回正确的图像。问题是我已经切换到MVVM模型,我的代码更改图像将不再起作用。我以前看起来像这样:
Image img = (Image)btn.Content;
if (c.Status == Administration.Web.ObjectStatus.Enabled) {
img.Source = new System.Windows.Media.Imaging.BitmapImage(new Uri("/Images/enable-icon.png", UriKind.Relative));
} else {
img.Source = new System.Windows.Media.Imaging.BitmapImage(new Uri("/Images/disable-icon.png", UriKind.Relative));
}
在更改状态的命令期间,我尝试对包含该对象的属性进行更改,但它不会在UI上反映它。如果我对屏幕进行硬刷新,则状态会正确更改。有没有办法在当前情况下重新绑定图像?
答案 0 :(得分:2)
将图像的源绑定到某个bool Enabled属性,并且每次更改后,EnableDisableConverter都可以对该值做出反应。
XAML:
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button CommandParameter="{Binding}" HorizontalAlignment="Center">
<Image Source="{Binding IsEnabled, Converter={StaticResource EnableDisableConverter}}" Height="25" Width="25" />
</Button>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
视图模型:
...
public bool IsEnabled
{
get
{
return _isEnabled;
}
set
{
_isEnabled=value;
NotifyPropertyChanged("IsEnabled");
}
}
...
转换器:
public object Convert(object value, ...)
{
if((bool)value)
return uri of image1;
else
return uri of image2;
}
但我不知道网格中的对象是什么,ViewModel是什么。可能有问题。关键是要将IsEnabled属性与网格中的那些对象进行核心绑定。