zoukankan      html  css  js  c++  java
  • WPF的MVVM模式给ComboBox绑定数据和读取

    在网上找到类似的代码:

    XAML文件

    <ComboBox Margin="-16,3,0,5" Grid.Row="1" Grid.Column="2" Grid.ColumnSpan="2" Name="cboxLocationKeyword"
     ItemsSource="{Binding LocationSource,Mode=OneWay}"
     SelectedValuePath="ID"
     DisplayMemberPath="Info"
     SelectedItem="{Binding SelectLocation}" />

    对应的ViewModel文件

    public class LocationRoad
    {
        public int ID { set; get; }
        public string Code { set; get; }
        public string Info { set; get; }
    }
    //
    /// 当ComboBox选中项更改时发生
    ///
    private LocationRoad _selectLocation;
    public LocationRoad SelectLocation
    {
        get
        {
            return this._selectLocation;
        }
        set
        {
            this._selectLocation = value;
            if (this.PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs("SelectLocation"));
        }
    }
     
    private ObservableCollection _locationRoad = null;
     
    public ObservableCollection LocationSource
    {
        get
        {
            if (this._locationRoad == null)
            {
                this._locationRoad = new ObservableCollection() {
                     new LocationRoad() { ID = 1, Code = "NGQ", Info = "南岗区" },
                     new LocationRoad() { ID = 2, Code = "DLQ", Info = "道里区" },
                     new LocationRoad() { ID = 3, Code = "DWQ", Info = "道外区" },
                     new LocationRoad() { ID = 4, Code = "PFQ", Info = "平房区" },
                     new LocationRoad() { ID = 5, Code = "XFQ", Info = "香坊区" },
                     };
     
            }
            return this._locationRoad;
        }
        set
        {
            this._locationRoad = value;
            if (this.PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs("LocationSource"));
        }
    }

    如果要进行双向绑定或其他的绑定方式,只要更改上面binging块中的Mode方式就可以了。一般用不到吧?

    出处:https://bbs.csdn.net/topics/390091439

    ============================================

    我根据上面的代码,做了一点修改

    <ComboBox Name="CbClientType" SelectedIndex="0" SelectedValuePath="Code" DisplayMemberPath="Descript"
    SelectedItem="{Binding CbClientTypeSelectedItem}" MinWidth="70"></ComboBox>

    对应的ViewModel代码

            public CustomNodeItem _CbClientTypeSelectedItem;
            public CustomNodeItem CbClientTypeSelectedItem
            {
                get { return _CbClientTypeSelectedItem; }
                set
                {
                    _CbClientTypeSelectedItem = value;
                    //if (SelectCallBack != null)
                    //{
                    //    SelectCallBack(value);
                    //}
                    NotifyOfPropertyChange();
                }
            }
    
            private List<CustomNodeItem> _CbClientType;
            public List<CustomNodeItem> CbClientType
            {
                get { return _CbClientType; }
                set
                {
                    _CbClientType = value;
                    if (value != null && value.Count > 0 && CbClientTypeSelectedItem == null)
                    {
                        CbClientTypeSelectedItem = value.First();
                    }
                    NotifyOfPropertyChange();
                }
            }
    
            //在按钮的事件中获取选择项
            public void BtnTest()
            {
                string msg = CbClientTypeSelectedItem.Descript;
                MessageBox.Show(msg);
            }

     说明:这个应用在Caliburn.Micro中使用的

  • 相关阅读:
    千万不要死于无知—几条健康忠告(一)
    2006中国大学生最佳雇主TOP50排行榜(转)
    chromedriver与chrome版本映射表(最新)
    selenium自动化测试学习(一)
    selenium自动化测试——常见的八种元素定位方法
    作业1
    快速搭建属于自己的数据库——mongodb
    通过express搭建自己的服务器
    我的前端之路
    分享ES6中比较常用又强大的新特性
  • 原文地址:https://www.cnblogs.com/mq0036/p/12552792.html
Copyright © 2011-2022 走看看