wpf下拉框 绑定怎么让他默认有选中项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wpf下拉框 绑定怎么让他默认有选中项相关的知识,希望对你有一定的参考价值。

一开始的时候,设置SelectedIndex = xxx


或者设置SelectedItem = xxx


如果你的数据源是在加载后动态绑定上的,建议自己做一个附加属性来实现。例如:

    public static class ItemsControlHelper
    
        /// <summary>
        /// AutoSelectedIndex Attached Dependency Property
        /// </summary>
        public static readonly DependencyProperty AutoSelectedIndexProperty =
            DependencyProperty.RegisterAttached("AutoSelectedIndex", typeof(int), typeof(ItemsControlHelper),
                new FrameworkPropertyMetadata(-1,
                    new PropertyChangedCallback(OnAutoSelectedIndexChanged)));

        /// <summary>
        /// Gets the AutoSelectedIndex property.  This dependency property 
        /// indicates ....
        /// </summary>
        public static int GetAutoSelectedIndex(Selector d)
        
            return (int)d.GetValue(AutoSelectedIndexProperty);
        

        /// <summary>
        /// Sets the AutoSelectedIndex property.  This dependency property 
        /// indicates ....
        /// </summary>
        public static void SetAutoSelectedIndex(Selector d, int value)
        
            d.SetValue(AutoSelectedIndexProperty, value);
        

        /// <summary>
        /// Handles changes to the AutoSelectedIndex property.
        /// </summary>
        private static void OnAutoSelectedIndexChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        
            var selector = d as Selector;
            if (selector == null)
                return;

            var index = (int)e.NewValue;
            if (index > -1)
            
                selector.ItemContainerGenerator.ItemsChanged += OnItemsChanged;
            
            else
            
                selector.ItemContainerGenerator.ItemsChanged -= OnItemsChanged;
            
        

        private static void OnItemsChanged(object sender, ItemsChangedEventArgs e)
        
            var selector = sender.ReflectGetProperty<Selector>("Host");
            if (selector == null)
                return;

            var index = GetAutoSelectedIndex(selector);

            if (index > -1 && index < selector.Items.Count)
            
                // 不直接设置SelectedIndex,因为index有可能与上一次的相同,导致不会选中
                // 需要使用对应的item去设置
                var item = selector.Items[index];
                selector.SelectedItem = item;
            
        

上面的代码用了自己写的一个库,ReflectGetProperty这个你自己用反射实现一下吧。


使用的时候

<ComboBox 命名空间:ItemsControlHelper.AutoSelectedIndex="3"/>

参考技术A

绑定SelectedItem属性,如果需要后台修改当前选择属性,LstSelect需要使用依赖属性或者继承INotifyPropertyChanged消息接口。

关于数据绑定,可以查看博文:http://blog.csdn.net/rabbitsoft_1987/article/details/19297073

    public partial class MainWindow : Window
    
        public List<String> LstSource  get; set; 

        public string LstSelect  get; set; 

        public MainWindow()
        
            InitializeComponent();

            LstSource = new List<string>()  "Name1", "Name2", "Name3" ;

            LstSelect = "Name2";

            this.DataContext = this;
        
    

xaml

        <ComboBox HorizontalAlignment="Left" Height="38" Margin="63,160,0,0" VerticalAlignment="Top" Width="155"
                  ItemsSource="Binding LstSource"
                  SelectedItem="Binding LstSelect"/>

本回答被提问者和网友采纳

45、vue select下拉框绑定默认值

参考技术A vue select下拉框绑定默认值:

首先option要加value值,以便v-model可以获取到对应选择的值

一、当没有绑定v-model,直接给对应的option加selected属性

二、当给select绑定了v-model的值的时候,要给v-model绑定的data值里写默认值

以上是关于wpf下拉框 绑定怎么让他默认有选中项的主要内容,如果未能解决你的问题,请参考以下文章

下拉框select的值保存不生效

C#DataGrid如何绑定其中一列为下拉框?并且获取值

tp框架的模板中 select下拉框 怎么判断默认选中

45、vue select下拉框绑定默认值

态改变select下拉框的当前选中项

C# winform combox 下拉框选项过长,显示不全,怎么解决