C# 在MVVM中获取列表框SelectedValue

C# 在MVVM中获取列表框SelectedValue,c#,wpf,mvvm,C#,Wpf,Mvvm,我有一个主窗口,其中包含一个listbox和一个ContentControl,每次从listbox中选择某个内容时,ContentControl都会显示其他内容 <ContentControl Content="{Binding ElementName=SomeList, Path=SelectedItem.Content}" /> <ListBox x:Name="SomeList" Margin="0 16 0 16" SelectedIndex="0" S

我有一个主窗口,其中包含一个listbox和一个ContentControl,每次从listbox中选择某个内容时,ContentControl都会显示其他内容

   <ContentControl Content="{Binding ElementName=SomeList, Path=SelectedItem.Content}" />

  <ListBox  x:Name="SomeList" Margin="0 16 0 16" SelectedIndex="0"  SelectedValue="{Binding X}"            
                         ItemsSource="{Binding DemoItems}">
尝试显示X将导致相同的结果:

namespace.DemoItem

DemoItem.cs:

 public class DemoItem : INotifyPropertyChanged
{
    private object _icon;
    private string _name;
    private object _content;
    private Thickness _marginRequirement;

    public DemoItem(object icon, string name, object content, Thickness margin,  IEnumerable<DocumentationLink> documentation)
    {
        _icon = icon;
        _name = name;
        Content = content;
        _marginRequirement = margin;

        Documentation = documentation;
    }
} 

那么,如何才能只获取名称呢?

数据绑定仅适用于公共属性。所以添加一个Name属性

假设您打算按名称选择DemoItem,则还应将列表框的SelectedValuePath与SelectedValue一起设置:

然后简单地显示所选项目的名称,如下所示:

<TextBlock Text="{Binding X}" />

您希望在ContentControl中显示所选DemoItem的_name字段的值吗?此时,我只想获取在Listbox中选择的值,但由于我有多个对象,我只想获取名称,而不是图标,不是厚度,什么都没有。只有名字。然后@Clemens给你一个答案:我想我把我的问题弄得比应该的更复杂了。我的列表框包含一个图标、一个字符串等。我想获取所选项目的字符串名称。这就是全部。我尝试添加SelectedValuePath,但结果是一个空的消息框。这就是你在这里得到的。工作正常,我很感激。问题是我选择了小写的ValuePath而不是name:
public class DemoItem : INotifyPropertyChanged
{
    ...
    public string Name { get { return _name; } }
}
<ListBox ItemsSource="{Binding DemoItems}"
         SelectedValuePath="Name"
         SelectedValue="{Binding X}" />
<TextBlock Text="{Binding X}" />