如何有條件地將數據綁定到組合框?我有一個默認情況下應該顯示一個ID的組合框。但是,如果用戶選中複選框,則顯示屏應同時顯示ID和名稱。例如,「OO1:Sam」。我的默認ID顯示正確。我只是不知道如何根據複選框的「IsChecked」狀態來顯示ID和名稱。你如何有條件地綁定數據?
WPF和C#.NET 3.5
如何有條件地將數據綁定到組合框?我有一個默認情況下應該顯示一個ID的組合框。但是,如果用戶選中複選框,則顯示屏應同時顯示ID和名稱。例如,「OO1:Sam」。我的默認ID顯示正確。我只是不知道如何根據複選框的「IsChecked」狀態來顯示ID和名稱。你如何有條件地綁定數據?
WPF和C#.NET 3.5
這裏有一種方法,使用與觸發器組合框的樣式來動態設置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}" />
馬特,非常感謝!這正是我所期待的。當然,我相信你可以告訴我對WPF很陌生。我知道它比我想要的要容易得多。現在,有沒有辦法讓它成爲「StaticResource」,不知道這是否合適。你將如何在組合框定義中使用它? – GAR8 2010-10-26 22:49:46
您是否打算重複使用跨多個ComboBoxes GAR8的樣式?如果您喜歡,我可以編輯答案並將其改爲資源 - 這不是一個大變化。如果你不是在多個ComboBox中重用它,將它作爲一個資源恕我直言並不值得。 – 2010-10-26 22:52:38
是的,Matt有兩個組合框會受到這個單一複選框狀態以及DataGrid中包含的一些數據的影響。我也將在另一個複選框上使用相同的概念,這將影響三個組合框中同一個DataGrid中的文本框和數據。所以有一個資源來最小化和重用代碼將是非常有用的。非常感謝你對此的幫助。 G – GAR8 2010-10-26 23:06:28
我會做,在ViewModel。您可以爲組合框項目設置視圖模型,爲複選框所在的任何屏幕創建另一個視圖模型,以及複選框viewmodel在其值更改時告訴項目viewmodel的一些方法。然後,項目viewmodel在其Text屬性(或任何您稱之爲的)中具有條件邏輯,並實現通常的INotifyPropertyChanged模式,以在其文本發生更改時通知UI。
好處:這種方式可以爲此行爲編寫單元測試。 (如果它值得投入,這是值得爲單元測試編寫的。)
喲,什麼語言? – 2010-10-26 21:28:59
向客戶端/或數組發送值列表。將項目附加到列表中,在將項目添加到下拉列表時對列表進行適當的字符串處理。 – brumScouse 2010-10-26 21:39:48