我有一个多列List绑定到一个ComboBox。
它将列表列Name显示为ItemSource。

问题
SelectedItem确实返回了Name。
使用MessageBox.Show(vm.cboVideoQuality_SelectedItem);,string显示为MyProgram.ViewModel+VideoQuality而不是High。
我尝试使用以下方法过滤Name:
vm.cboVideoQuality_SelectedItem.FirstOrDefault(s => s.Name);
但是它给出了错误的'char' does not contain definition for Name。
XAML
绑定Item Source和Selected Item。
<ComboBox x:Name="cboVideoQuality"
ItemsSource="{Binding cboVideoQuality_Items, Mode=TwoWay}"
DisplayMemberPath="Name"
SelectedItem="{Binding cboVideoQuality_SelectedItem, Mode=TwoWay}"
SelectedValuePath="Name"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Margin="0,0,0,0"
Width="100" />ViewModel
// Item Source
//
public class VideoQuality
{
public string Name { get; set; }
public string Bitrate { get; set; }
}
public List<VideoQuality> _cboVideoQuality_Items = new List<VideoQuality>()
{
new ViewModel.VideoQuality() { Name = "High", Bitrate = "5000K" },
new ViewModel.VideoQuality() { Name = "Medium", Bitrate = "2500K" },
new ViewModel.VideoQuality() { Name = "Low", Bitrate = "500K" },
};
public List<VideoQuality> cboVideoQuality_Items
{
get { return _cboVideoQuality_Items; }
set
{
_cboVideoQuality_Items = value;
OnPropertyChanged("cboVideoQuality_Items");
}
}
// Selected Item
//
public string _cboVideoQuality_SelectedItem { get; set; }
public string cboVideoQuality_SelectedItem
{
get { return _cboVideoQuality_SelectedItem; }
set
{
if (_cboVideoQuality_SelectedItem == value)
{
return;
}
_cboVideoQuality_SelectedItem = value;
OnPropertyChanged("cboVideoQuality_SelectedItem");
}
}C#
我不能检查selected = "High"是否是SelectedItem,因为SelectedItem不等于Name。
它等于MyProgram.ViewModel+VideoQuality。
ViewModel vm = mainwindow.DataContext as ViewModel;
string selected = vm.cboVideoQuality_SelectedItem;
if (selected == "High")
{
// ...
}发布于 2018-07-17 10:39:23
您已经使用了SelectedValuePath,当然也应该使用SelectedValue而不是SelectedItem。
<ComboBox
ItemsSource="{Binding cboVideoQuality_Items}"
DisplayMemberPath="Name"
SelectedValuePath="Name"
SelectedValue="{Binding cboVideoQuality_SelectedItem}" .../>请注意,在这两个绑定中,Mode=TwoWay都是多余的。默认情况下,ItemsSource绑定永远不是双向绑定,而SelectedValue绑定是双向绑定.
我还建议不要在视图模型属性名称中使用绑定目标属性详细信息。cboVideoQuality_SelectedItem应该是SelectedVideoQuality。因此,您也可以将其绑定到SelectedValue属性或ListBox的文本属性,甚至可以绑定到TextBlock的文本属性,而不会造成太多混乱。
https://stackoverflow.com/questions/51379251
复制相似问题