2010-10-26 48 views
1

如何有條件地將數據綁定到組合框?我有一個默認情況下應該顯示一個ID的組合框。但是,如果用戶選中複選框,則顯示屏應同時顯示ID和名稱。例如,「OO1:Sam」。我的默認ID顯示正確。我只是不知道如何根據複選框的「IsChecked」狀態來顯示ID和名稱。你如何有條件地綁定數據?

WPF和C#.NET 3.5

+0

喲,什麼語言? – 2010-10-26 21:28:59

+0

向客戶端/或數組發送值列表。將項目附加到列表中,在將項目添加到下拉列表時對列表進行適當的字符串處理。 – brumScouse 2010-10-26 21:39:48

回答

3

這裏有一種方法,使用與觸發器組合框的樣式來動態設置ItemTemplate:它

編輯:改變風格融入了資源。請注意,這仍然直接使用元素綁定綁定到CheckBox - 如果您希望它更加靈活,您可以將CheckBox的IsChecked屬性綁定到ViewModel的屬性,並依賴更改而不是IsChecked。

讓我們繼續前進的風格融入我們的窗口的資源部分:

<Window.Resources> 
    <Style x:Key="myStyle" TargetType="ComboBox"> 
     <Setter Property="ItemTemplate"> 
      <Setter.Value> 
       <DataTemplate> 
        <StackPanel> 
         <TextBlock Text="{Binding Name}" /> 
        </StackPanel> 
       </DataTemplate> 
      </Setter.Value> 
     </Setter> 

     <Style.Triggers> 
      <DataTrigger Binding="{Binding IsChecked,ElementName=chk}" Value="True"> 
       <Setter Property="ItemTemplate"> 
        <Setter.Value> 
         <DataTemplate> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="{Binding ID}" /> 
           <TextBlock Text=": " /> 
           <TextBlock Text="{Binding Name}" /> 
          </StackPanel> 
         </DataTemplate> 
        </Setter.Value> 
       </Setter> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

現在我們定義的複選框,一對夫婦組合框的依賴於它:

<CheckBox x:Name="chk" Content="Click Me" /> 

<ComboBox ItemsSource="{Binding}" Style="{StaticResource myStyle}" /> 

<ComboBox ItemsSource="{Binding}" Style="{StaticResource myStyle}" /> 
+0

馬特,非常感謝!這正是我所期待的。當然,我相信你可以告訴我對WPF很陌生。我知道它比我想要的要容易得多。現在,有沒有辦法讓它成爲「StaticResource」,不知道這是否合適。你將如何在組合框定義中使用它? – GAR8 2010-10-26 22:49:46

+0

您是否打算重複使用跨多個ComboBoxes GAR8的樣式?如果您喜歡,我可以編輯答案並將其改爲資源 - 這不是一個大變化。如果你不是在多個ComboBox中重用它,將它作爲一個資源恕我直言並不值得。 – 2010-10-26 22:52:38

+0

是的,Matt有兩個組合框會受到這個單一複選框狀態以及DataGrid中包含的一些數據的影響。我也將在另一個複選框上使用相同的概念,這將影響三個組合框中同一個DataGrid中的文本框和數據。所以有一個資源來最小化和重用代碼將是非常有用的。非常感謝你對此的幫助。 G – GAR8 2010-10-26 23:06:28

1

我會做,在ViewModel。您可以爲組合框項目設置視圖模型,爲複選框所在的任何屏幕創建另一個視圖模型,以及複選框viewmodel在其值更改時告訴項目viewmodel的一些方法。然後,項目viewmodel在其Text屬性(或任何您稱之爲的)中具有條件邏輯,並實現通常的INotifyPropertyChanged模式,以在其文本發生更改時通知UI。

好處:這種方式可以爲此行爲編寫單元測試。 (如果它值得投入,這是值得爲單元測試編寫的。)