如何使用WPF中的绑定更改可见性

时间:2015-01-04 19:55:01

标签: c# wpf mvvm

我正在使用MVVM Light WPF 4。

我的Home.xaml中有一个ContentPresenter。

<ContentPresenter Name="MDI" Content="{Binding WindowName, Mode=OneWay}">

我将视频模型中的用户控件绑定到此

public UserControl WindowName { get; set; }
    void ShowSalesEntry()
    {
        WindowName = null;
        WindowName = new SalesEntry();
        RaisePropertyChanged("WindowName");
    }

通过在菜单点击中使用命令,并且绑定正常。

现在在用户控件中我有一个我曾经关闭的按钮(但关闭我改变了可见性 通过这种方式崩溃..

Visibility="{Binding visibility, Mode=OneWay}"

在用户控件视图模型中,

public SalesEntryViewModel()
    {
        visibility = Visibility.Visible;            
        cmdExitWindow = new RelayCommand(ExitWindow);
        RaisePropertyChanged("visibility");
    }

以及以下关闭(崩溃的可见性)

public RelayCommand cmdExitWindow { get; set; }

    void ExitWindow()
    {
        visibility = Visibility.Hidden;
        RaisePropertyChanged("visibility");
    }

退出(意味着可见性已折叠) 这个工作正常。

问题是,当我点击同一页面时,我的意思是显示相同的用户控件, 现在这次可见性仍然崩溃了。即使我改变为可见的 加载事件。

如何解决这个问题.. 我是MVVM WPF的新手..请帮帮我..

1 个答案:

答案 0 :(得分:1)

  

问题是,当我点击同一页面时,我的意思是显示同一个用户   控制,现在这次可见性仍然崩溃。即使   我在加载事件中变为可见。

根据此评论和提供的代码,您要么省略了代码,要么混淆了构造函数的用途。

在构造函数中,您已将可见性设置为Visible。然后,您有一个方法可以将可见性设置为Hidden,但是一旦发生这种情况,就没有任何内容可以将其设置回Visible。构造函数仅在创建对象时触发。您需要在适当的时间回复设置可见性(即您的评论“当我点击同一页面”时)。

//Add these lines to the method/event that will show the control again
visibility = Visibility.Visible;
RaisePropertyChanged("visibility");

根据您提供的内容,这是我能给出的最佳答案。