在网上找到类似的代码:
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方式就可以了。一般用不到吧?
我根据上面的代码,做了一点修改
<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中使用的