[Siverlight入门系列]MVVM模式下如何让下拉框ComboBox默认选中第一项
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Siverlight入门系列]MVVM模式下如何让下拉框ComboBox默认选中第一项相关的知识,希望对你有一定的参考价值。
参考技术A 但MVVM模式下,就不那么方便了,需要绑定SelectedItem,例如:1:2:<ComboBoxItemsSource=Binding Months3:SelectedItem
=Binding Month, Mode=TwoWay/ 似乎可行,但如果是默认加载第一项的话,这个SelectedItem就应该是绑定源更新以后的ItemSource.FirstOrDefault(),为何要双向绑定呢?有一点不太爽。有没有其它办法呢?很简单,继承ComboBox,写一个控件,让它默认选中第一项,就解决这个问题了,不用绑定SelectedItem。
<ComboBoxItemsSource
=Binding Months/ 自定义ComboBox控件代码如下,也非常简单,思路就是ItemSource更新以后就自动默认选中第一行即可:1:publicclassCustomComboBox : ComboBox2:3:/// <summary4:/// Initializes a new instance of the <see cref=CustomComboBox/ class.5:/// </summary6:publicCustomComboBox()7:8:Loaded += ComboBoxLoaded;9:SelectionChanged += ComboBoxSelectionChanged;10:11:12:voidComboBoxLoaded(objectsender, RoutedEventArgs e)13:14:SetSelectedItem();15:16:17:voidComboBoxSelectionChanged(objectsender, SelectionChangedEventArgs e)18:19:SelectedItem = e.AddedItems.Count 0 ? e.AddedItems[0] :null;20:21:22:publicnewobjectSelectedItem23:24:get return(object)GetValue(SelectedItemProperty); 25:set SetValue(SelectedItemProperty,
value); 26:27:28:publicnewstaticreadonlyDependencyProperty SelectedItemProperty =29:DependencyProperty.Register(
SelectedItem,
typeof(object),
typeof(CustomComboBox),
30:newPropertyMetadata((o, e) = ((CustomComboBox)o).SetSelectedItem()));31:32:privatevoidSetSelectedItem()33:34:if(Items.Count 0)35:base
.SelectedIndex = 0;36:37://var value = SelectedItem;38://if (Items.Count 0 && value != null)39://40:// base.SelectedIndex = Items.IndexOf(value);41://42:43:44:protectedoverridevoidOnItemsChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e)45:46:base
.OnItemsChanged(e);47:SetSelectedItem();48:49: 如果你觉得代码好用就拿过去,否则请分享更好的代码。本回答被提问者采纳
以上是关于[Siverlight入门系列]MVVM模式下如何让下拉框ComboBox默认选中第一项的主要内容,如果未能解决你的问题,请参考以下文章