Привязка триггера WPF к свойству MVVM
У меня есть datatemplate, содержащий изображение, которое я хочу скрыть, если значение свойства в ViewModel равно true. Может ли кто-нибудь сказать мне, почему xaml ниже не работает?
<Image x:Name="img" Source="..ImagesList_16.png" Margin="0,0,5,0">
<Image.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding CurrentListHasPendingChanges}" Value="True">
<Setter Property="Image.Visibility" Value="Hidden" />
</DataTrigger>
<DataTrigger Binding="{Binding CurrentListHasPendingChanges}" Value="False">
<Setter Property="Image.Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
4 ответов
не так
<Setter Property="Visibility" Value="Hidden" />
?
Я предполагаю, что вы используете INotifyProptyChanged.
редактировать Я немного погуглил, и я думаю, вам нужно использовать какой-то шаблон, чтобы заставить триггер работать.
например.: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/ae2dbfb7-5dd6-4352-bfa1-53634289329d
http://www.thejoyofcode.com/Help_Why_cant_I_use_DataTriggers_with_controls_in_WPF.aspx
Попробуйте удалить часть "Image"из свойства=" Image.Видимость " так что у вас будет:
<Setter Property="Visibility" Value="Hidden"/>
и добавьте TargetType в свой стиль:
<Style TargetType="{x:Type Image}">
Я просто сделал что-то подобное, используя ContentControl.
<ContentControl Content="{Binding CurrentListHasPendingChanges}">
<ContentControl.ContentTemplate>
<DataTemplate>
<Image x:Name="img" Source="..\Images\List_16.png" Margin="0,0,5,0" Visibility="Hidden" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding}" Value="False">
<Setter Property="Image.Visibility" Value="Visible" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
на мой взгляд, нам не нужно использовать триггеры, только привязка работает хорошо. Для привязки к модели свойств можно использовать BooleanToVisibilityConverter Объявляется следующим образом:
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</UserControl.Resources>
и как использовать его просто, просто укажите на ключ, указанный выше:
<Image HorizontalAlignment="Left" Height="16" VerticalAlignment="Center" Width="16"
Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityConverter}}"
Source="/myPath;component/Resources/Images/image1.png"/>
свойство в ViewModel:
private bool _hasError = false;
public bool HasError
{
get { return !string.IsNullOrEmpty(_messageError); }
set
{
_hasError = value;
this.NotifyOfPropertyChange(() => this.HasError);
}
}