2015-01-04 92 views
0

我正在使用MVVM Light WPF 4.如何使用WPF中的綁定更改可見性

我的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"); 
    } 

,它是有約束力的罰款。

現在,在用戶控制我有一個按鈕,我用來關閉(但以關閉i中的能見度 改變爲摺疊)通過這種方式..

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

問題是,當我點擊同一頁面我的意思是,以顯示相同的用戶 控制,現在這時間的可見性仍然崩潰。即使 我已更改爲在加載事件中可見。

根據此評論和提供的代碼,您已經省略了代碼,或者您已經混淆了構造函數的用途。

在您的構造函數中,您已將可見性設置爲Visible。然後您有一種方法將可見性設置爲Hidden,但一旦發生這種情況,沒有任何事情可以將其設置回Visible。構造函數僅在創建對象時觸發。您需要在適當的時候設置可見性(即您的評論「」,當我點擊相同頁面時)。

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

這是根據您提供的最佳答案。

+0

嗨,謝謝你的回覆..但是,當我再次點擊菜單,我重新初始化對象的權利' WindowName = null; WindowName = new SalesEntry(); RaisePropertyChanged(「WindowName」);'這種方式.. 我錯了嗎? – shanmugharaj

+1

你實際上在某處創建了一個SalesEntryViewModel的新實例嗎?它看起來像你做一個新的窗口購買正在使用相同的viewModel沒有設置可見性的可見性。 –

+0

謝謝指出那個出山了,好點T.如果他們正在繪製相同的視圖模型(例如,視圖模型實例在app.xaml或另一個共享資源字典中聲明),那麼無論構建新對象,您都一定會得到此結果。 – learningcs

相關問題