2008-12-03 37 views
11

組控制這裏的情景有沒有辦法在邏輯上在WPF

我有一些TextBlock的控制網格,每個網格中的一個單獨的單元格。從邏輯上講,我希望能夠將它們的可見性設置爲綁定到ViewModel中的屬性。但是由於它們分別位於網格中的單獨單元格中,因此我必須設置每個TextBlock的可見性屬性。

有沒有一種方法讓我可以設置其子項的共同屬性的非可視組?還是我在做夢?

回答

8

有沒有非視覺組,使這成爲可能。

直接或在所有TextBlocks共享的通用Style中設置Visibility屬性可能是最簡單的解決方案。

+0

請問您能詳細說明嗎?我希望該團體的可見性被綁定到一個附屬的財產。 – Shimmy 2010-12-15 00:27:40

2

我希望你已經在DataTemplate中定義了所有的單元UI元素。你可以在ViewModel級別做一個小竅門來實現你正在尋找的東西。

  1. 在ViewModel中有Singleton類,它應該具有可見性或您希望綁定到每個TextBlock的等效屬性。
  2. 的Singleton類應執行INotifyPropertyChanged得到變更通知到UI
  3. 綁定辛格爾頓在XAML屬性,並從應用程序中的任何地方控制這個屬性。

    < TextBlock的能見度= 「{綁定源= {X:靜態本地:Singleton.Instance},路徑=能見度}」

和一個簡單的單例類可以被實現爲

public class Singleton :INotifyPropertyChanged 
{ 
    private Singleton() { } 
    public static Singleton Instance 
    { 
     get 
     { 
      if (instance == null){ instance = new Singleton(); } 
      return instance; 
     } 
    } 
    private Visibility _visibility; 
    public Visibility Visibility 
    { 
     get { return _visibility; } 
     set 
     { 
      _visibility = value; 
      PropertyChanged(this, new PropertyChangedEventArgs("Visibility")); 
     } 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 
    private static Singleton instance; 
} 

現在你可以控制Singleton.Instance.Visibility = Visibility.Collapsed從你的代碼的任何地方後面

4

另一種選擇是將項目組中每個項目的可見性屬性綁定到一個項目,這樣在您的代碼中,您只需設置一個項目的可見性即可。

0

可能會創建一個自定義控件,將其所有添加/刪除子方法重定向到其自己的父級,同時仍保留其內容的記錄,以便它可以應用其自己的屬性樣式。雖然會很棘手。

0

如果可能的話我大多將它們放置在一個組框和組框了borderThickness設置爲0。這樣,所有的控件進行分組,你看不出這是一個組框,你可以用一個屬性設置能見度..

<Style TargetType="{x:Type GroupBox}" 
    x:Key="HiddenGroupBox"> 
<Setter Property="BorderThickness" 
     Value="0" /> 

相關問題