Перепривязка источника изображения при использовании конвертера? - PullRequest
1 голос
/ 09 марта 2011

У меня есть кнопка с изображением внутри.Эта кнопка появляется на сетке данных много раз для отображения статуса строки.Когда пользователь нажимает кнопку, он изменяет состояние базового объекта в строке на включенное или отключенное.Вот как выглядит кнопка:

<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));
}

Во время команды, которая изменяет статус, я пытался вызвать изменение свойства, содержащего объект, но оно не отражается в пользовательском интерфейсе.Если я делаю жесткое обновление экрана, статус корректно меняется.Есть ли способ перепривязать изображение в текущей ситуации?

1 Ответ

2 голосов
/ 10 марта 2011

Свяжите источник изображения с некоторым свойством 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>

ViewModel:

...
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 было привязано к этим объектам в сетке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...