微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将两个元素的可见性绑定到一个属性

如何解决将两个元素的可见性绑定到一个属性

| 我有两个菜单项元素-\“ 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}}\" >

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。