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中使用的

posted on 2020-03-23 16:04  jack_Meng  阅读(...)  评论(...编辑  收藏

导航