2010-06-25 68 views
4

我基本上需要屏幕的一部分有一個「身份驗證」框,如果您登錄,那麼它會顯示您的用戶名和一個「切換用戶」按鈕,但如果您未登錄,它只是顯示登錄按鈕。如何根據WPF中的條件顯示不同的控件?

我可以有兩種完全不同的控制,把兩者在屏幕上,他們的可見性屬性綁定到IsAuthenticated,但我希望有一些好的建議在那裏爲一個更好的辦法。

謝謝

回答

8

既然你提到結合的知名度,我會告訴我做什麼來解決類似的問題。

在你的App.xaml把

<Application.Resources> 
    <BooleanToVisibilityConverter x:Key="VisibilityOfBool" /> 
</Application.Resources> 

對於您希望通過您的視圖模型的布爾屬性,你可以簡單地這樣做是爲了控制可見每一個控制。

Visibility="{Binding IsEditable, Converter={StaticResource VisibilityOfBool}}" 

這將根據IsEditable切換控件的可見性。

+0

BooleanToVisibilityConverter ...這太酷了。 – mdisibio 2013-02-01 18:01:59

3

你有2個單獨的控件的選項其實是我的第一選擇。

這有讓您徹底,很容易測試兩個你控制的優勢。您可以輕鬆使用觸發器來根據DataContext中的任何條件切換哪些控件可見。它乾淨,簡單,而且相當優雅。

話雖這麼說,還有其他的選擇,如果你想避免這種情況。

例如,您可以對該「框」區域使用ContentPresenter,並將其內容綁定到DataContext中的一個屬性,該屬性被簡單地定義爲「對象」。然後,您可以在運行時將其設置爲單獨的類型,而不是通過身份驗證。通過爲每種類型指定一個DataTemplate,WPF將自動爲您連接適當的控件。 (這基本上是一個視圖模型,第一MVVM式的方法。)

+0

我使用MVVM所以也許第二條路線是最好的? – 2010-06-25 17:17:41

+0

@Max:即使在MVVM中,我仍會使用第一條路線。第二條路線的唯一優點是您無需爲用戶的身份驗證加載認證信息(該「窗格」的ViewModel)。在第一種方法中,你需要那裏的東西 - 即使它是空的。雖然這兩種方法都很好。 – 2010-06-25 17:18:59

+1

我也更喜歡第一種方法。但是,如果綁定在「不可見」控件中發生變化,您可能需要小心謹慎,它不會對「可見」控件(或下面的ViewModel)的行爲方式產生不利影響。 – 2010-06-25 18:30:29

相關問題