MVVM模式下ComboBox绑定List,如何获取选中的是哪一项.

sanlonezh 2012-06-11 05:28:01
MVVM模式下ComboBox绑定List<T>,如何获取选中的是哪一项.
例如 model

public class SysType:NotificationObject
{
private int selectValue;

public int SelectValue
{
get
{ return selectValue; }
set
{
selectValue = value;
this.RaisePropertyChanged("selectValue");
}
}
private string displayName;

public string DisplayName
{
get
{ return displayName; }
set
{
displayName = value;
this.RaisePropertyChanged("displayName");
}
}
}

XML:

<ComboBox Grid.Column="1" Height="23" HorizontalAlignment="Left" Margin="10,143,0,0"
ItemsSource="{Binding ListSysType,UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="DisplayName" SelectedValue="{Binding SelectValue}"
x:Name="CobSysType" VerticalAlignment="Top" Width="120" >
</ComboBox>
...全文
1248 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaoufo 2013-07-30
  • 打赏
  • 举报
回复
6楼代码 PropertyChanged 只能适用于绑定事件。。 这样写 都不让编译
韩依衣佳 2013-04-17
  • 打赏
  • 举报
回复
在viewmodel能获取到选中的ID和info吗?
sanlonezh 2012-06-12
  • 打赏
  • 举报
回复
呵呵找到了。

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"));
}
}

前台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}" />

如果要进行双向绑定或其他的绑定方式,只要更改上面binging块中的Mode方式就可以了。
sanlonezh 2012-06-12
  • 打赏
  • 举报
回复
如果要用ComboBox的changed事件,哪还用mvvm设计模式干什么!
昊子先生 2012-06-12
  • 打赏
  • 举报
回复
从change事件里去判断选择的哪一个
sanlonezh 2012-06-12
  • 打赏
  • 举报
回复
就是在mvvmModel这个类上我想知道我选取的是哪一行?
幸福小6 2012-06-12
  • 打赏
  • 举报
回复
不过因为你选择了SelectedValue,所以这里得到的值是你数据结构里SelectValue指定的值,自己去判断,
幸福小6 2012-06-12
  • 打赏
  • 举报
回复
CobSysType.SelectedItem

既是当前选中的元素。

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧