2010-09-02 5 views
1

Я создал DataGridCellTemplate, где у меня есть элемент управления Image. По умолчанию это свойство Source - X. Я заполняю DataGrid объектами моего собственного класса (также реализовал интерфейс INotifyPropertyChanged).Trigger when field field changed

Я хотел бы изменить свойство Source управления Image, когда какая-то логическая переменная изменяется с False на True.

Должен ли я использовать триггер? Если да, то как? Или, может быть, это должно быть сделано в коде C#?

Я мог бы сделать 2 элемента управления изображением, связать и контролировать их видимое свойство, но это хромое решение, я думаю.

Поблагодарили бы за любую помощь.

ответ

0

В вашем DataTemplate попробуйте следующее:

<DataTemplate> 
    <Image Name="Image" Source="X"/> 
    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding BooleanProperty}" Value="True"> 
      <Setter Property="Source" TargetName="Image" Value="Y" /> 
     </DataTrigger> 
    </DataTemplate.Triggers> 
</DataTemplate> 

Где BooleanProperty это свойство, которое вызывает исходный сдвиг. Обратите внимание, что изображение должно иметь имя - и оно должно использоваться в теге Setter. В примере - я меняю источник с 'X' на 'Y'

Надеюсь, это поможет!

+0

Это именно то, что я ожидал! Спасибо! – pavel

0

Вы должны увидеть, будет ли конвертер делать то, что вы хотите. Вы пишете один код, создавая класс, который реализует интерфейс IValueConverter (MSDN имеет пример на своем сайте).

Вы бы затем объявить ValueConverter как StaticResource вроде следующего (вы должны объявить локальное пространство имен, если вы уже не имеете его):

<local:BoolToImageConverter x:Key="imageConverter" /> 

Чтобы использовать его, то вы безвыходные свойство SourceControl Source для свойства Boolean и укажите конвертер в привязке. Ниже приведен пример:

<Image Source={Binding Path=IsImageShown, Converter={StaticResource imageConverter}} /> 

Еще одна вещь, чтобы быть в курсе, что преобразователь не может просто вернуть строку, содержащую URI на месте изображения. Он должен вернуть ImageSource, например BitmapImage.

+0

Будет проверять это решение позже, ниже выглядит проще и работает. В любом случае, спасибо. – pavel