首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >得到SelectedItem的ComboBox界多点列表

得到SelectedItem的ComboBox界多点列表
EN

Stack Overflow用户
提问于 2018-07-17 10:35:13
回答 1查看 59关注 0票数 0

我有一个多列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 SourceSelected Item

代码语言:javascript
复制
<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

代码语言:javascript
复制
// 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

代码语言:javascript
复制
ViewModel vm = mainwindow.DataContext as ViewModel;

string selected = vm.cboVideoQuality_SelectedItem;

if (selected == "High")
{
    // ...
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-17 10:39:23

您已经使用了SelectedValuePath,当然也应该使用SelectedValue而不是SelectedItem

代码语言:javascript
复制
<ComboBox
      ItemsSource="{Binding cboVideoQuality_Items}"
      DisplayMemberPath="Name"
      SelectedValuePath="Name"
      SelectedValue="{Binding cboVideoQuality_SelectedItem}" .../>

请注意,在这两个绑定中,Mode=TwoWay都是多余的。默认情况下,ItemsSource绑定永远不是双向绑定,而SelectedValue绑定是双向绑定.

我还建议不要在视图模型属性名称中使用绑定目标属性详细信息。cboVideoQuality_SelectedItem应该是SelectedVideoQuality。因此,您也可以将其绑定到SelectedValue属性或ListBox的文本属性,甚至可以绑定到TextBlock的文本属性,而不会造成太多混乱。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51379251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档