问题描述
|
我有两个菜单项元素-\“ Undelete \”和\“ Delete \”具有互补的可见性:显示一个时,另一个隐藏。
在viewmodel的代码中,我有一个依赖项属性FilesSelectedCanBeUndeleted定义如下:
private bool _filesSelectedCanBeUndeleted;
public bool FilesSelectedCanBeUndeleted
{
get
{
return _filesSelectedCanBeUndeleted;
}
set
{
_filesSelectedCanBeUndeleted = value;
OnPropertyChanged(\"FilesSelectedCanBeUndeleted\");
}
}
取消删除按钮的XAML如下所示:
<MenuItem Header=\"Undelete\" Command=\"{Binding UndeleteCommand }\"
Visibility=\"{Binding Path=FilesSelectedCanBeUndeleted,Converter={StaticResource BoolToVisConverter}}\" >
如您所见,取消删除的可见性已绑定到FilesSelectedCanBeUndeleted
属性(借助于BooleanToVisibilityConveter)。
现在我的问题是,如何编写XAML来将Delete按钮的可见性绑定到FilesSelectedCanBeUndeleted属性的\“ NOT \”值?
谢谢,解决方法
这是一个自定义IValueConverter的示例,该示例使您可以反转可见性逻辑。基本上,当您的view-model属性为true时,一个MenuItem将可见,而另一个折叠。
因此,您需要像这样定义转换器的两个实例:
<local:BooleanToVisibilityConverter x:Key=\"BooleanToVisibilityConverter\" />
<local:BooleanToVisibilityConverter x:Key=\"ReversedBooleanToVisibilityConverter\" IsReversed=\"true\" />
,您可以将datatrigger应用于您的menuitem,以避免在viemodel中出现其他这样的属性-
<MenuItem Header=\"Delete\"
Command=\"{Binding DeleteCommand }\">
<MenuItem.Style>
<Style TargetType=\"{x:Type MenuItem}\">
<Setter Property=\"Visibility\" Value=\"Visible\" />
<Style.Triggers>
<DataTrigger Binding=\"{Binding FilesSelectedCanBeUndeleted}\" Value=\"False\">
<Setter Property=\"Visibility\"
Value=\"Collapsed\" />
</DataTrigger>
</Style.Triggers>
</Style>
</MenuItem.Style>
</MenuItem>
,在ViewModel上创建新属性,然后仅取反\'FilesSelectedCanBeUndeleted \',然后将其绑定。,我前一阵子做了一个简单的否定...
private bool _filesSelectedCanBeUndeleted;
public bool FilesSelectedCanBeUndeleted{
get{
return _filesSelectedCanBeUndeleted;
}
set{
_filesSelectedCanBeUndeleted = value;
OnPropertyChanged(\"FilesSelectedCanBeUndeleted\");
// You have also to notify that the second Prop will change
OnPropertyChanged(\"FilesSelectedCanBeDeleted\");
}}
public bool FilesSelectedCanBeDeleted{
get{
return !FilesSelectedCanBeUndeleted;
}
}
Xaml可能看起来像这样……
<MenuItem Header=\"Delete\"
Command=\"{Binding DeleteCommand }\"
Visibility=\"{Binding Path=FilesSelectedCanBeDeleted,Converter={StaticResource BoolToVisConverter}}\" >