我的wpf表單中有20多個複選框。我需要在某些對象中存儲來自所有這些值的IsChecked
值。複選框綁定 - 什麼是更好的解決方案?
我知道兩種方式。
1)結合所有複選框使用依賴屬性等here
2)對應在對象屬性處理Clicked
事件個個
哪個溶液是較好的?是否有更好的解決方案在代碼隱藏方面佔用更少的空間?
我的wpf表單中有20多個複選框。我需要在某些對象中存儲來自所有這些值的IsChecked
值。複選框綁定 - 什麼是更好的解決方案?
我知道兩種方式。
1)結合所有複選框使用依賴屬性等here
2)對應在對象屬性處理Clicked
事件個個
哪個溶液是較好的?是否有更好的解決方案在代碼隱藏方面佔用更少的空間?
肯定使用綁定
如果你的複選框都無關,且所有的地方,就需要20個不同的依賴屬性綁定到你的DataContext或視圖模型
如果複選框被一起如陸續或在網格中列出的一個,你可以把它們收集並綁定一個ItemsControl
他們
<ItemsControl ItemsSource="{Binding Options}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Description}"
IsChecked="{Binding IsChecked}" />
</DataTemplate>
</ItemsControl>
</ItemsControl>
您的視圖模型或DataContext的將包含這樣的事情:
private List<Option> options;
private List<Option> Options
{
get
{
if (options== null)
{
options = new List<Option>();
// Load Options - For example:
options.Add(new Option { Description = "Option A", IsChecked = false });
options.Add(new Option { Description = "Option B" });
options.Add(new Option { Description = "Option C", IsChecked = true});
}
return options;
}
}
和你Option
類,簡直是
要存儲IsChecked狀態我建議遵循第一個(using binding
),最好是因爲綁定允許保持UI和代碼更加乾淨和解耦。 第二個(handling an event
)最像WinForms方法,所以我不明白爲什麼你應該在WPF應用程序中遵循它。
編輯:回答關於到多個屬性
問題,如果要看究竟是綁定到一個視圖,以及如何複選框被放置在視圖。 如果你使用的是ItemsControl
容器像ListView
和每個複選框屬於單行/列 - 可以將所有複選框綁定到一個單一的集合像
private IList<bool> states;
public IList<bool> States
{
get
{
return this.states;
}
set
{
this.states = value;
this.OnPropertyChanged("States");
}
}
爲了給你一個具體的答案 - 分享請UI佈局其中放置複選框的表單。
耶,試圖更好地解釋它,請,我的英語不夠好。哪一個更好? –
@Andrew:看到更新的答案,基本上是第一個 - 1,第二 - 2 :)。從我的角度來看,綁定更好,只是爲了存儲價值 – sll
像我發佈到大衛Basarab答案一樣的問題... –
綁定。
原因很簡單。如果您決定連接到IsChecked事件,則必須有額外的代碼才能確定哪個屬性指向哪個複選框。
更糟糕的情況是你有每個方法。
一旦你將它設置到複選框,你就完成了綁定。你所要做的就是將對象保存到最後。
如果你使用的是一個好的MVVM框架,你可以使用綁定而不必手動完成它們(只是將它們命名爲某種約定) - 我喜歡Caliburn Micro,但是有很多好的東西。
+1 - 雖然我更喜歡使用IsSelected; IsChecked意味着對象將始終綁定到複選框(或類似的)。 –