C# 在MVVM中获取列表框SelectedValue
我有一个主窗口,其中包含一个listbox和一个ContentControl,每次从listbox中选择某个内容时,ContentControl都会显示其他内容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
<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}" />