c# - 在带有 MVVM 的 WPF 中,在 ListBox 中显示 List<> 成员

标签 c# wpf mvvm listbox caliburn.micro

我想显示来自 List<> 的一些数据在 ListBox没有后面的代码。

我尝试通过 ItemsSource 使用绑定(bind)和 DisplayMemberPath但它不起作用。

模型:

public class PersonModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public string FullName
    {
        get
        {
            return $"{FirstName} + {LastName}";
        }
    }
}

View 模型:
public class ShellViewModel : Screen
{
    List<PersonModel> people = new List<PersonModel>();

    public ShellViewModel()
    {
        people.Add(new PersonModel { FirstName = "John", LastName = "Snow" });
        people.Add(new PersonModel { FirstName = "Cersei", LastName = "Lannister" });
        people.Add(new PersonModel { FirstName = "Bran", LastName = "Stark" });
    }
}

查看(XAML):
    <Label Grid.Column="1" Grid.Row="1" FontSize="30" FontWeight="Bold" 
           Content="Personal Data:" Margin="10"/>
    <ListBox Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="2" 
             ItemsSource="{Binding people}" DisplayMemberPath="FullName"/>

我哪里错了?我将不胜感激。

最佳答案

people必须是公共(public)属性才能绑定(bind)到它:

public List<PersonModel> people { get; } = new List<PersonModel>();

您还需要设置 DataContextListBox , 或其父 Window/UserControl/etc.,到 ShellViewModel 的一个实例
,除非您正在使用一些为您执行此操作的框架。

如果您使用 Caliburn.Micro ,这应该工作:
<ListBox Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="2" x:Name="people" DisplayMemberPath="FullName"/>

您可能还想将属性名称更改为 电话 eople 来处理默认的 C# 命名约定。

关于c# - 在带有 MVVM 的 WPF 中,在 ListBox 中显示 List<> 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56396673/

相关文章:

wpf - 在 WPF 中切换 View ,高级设计问题

c# - 尽管在本地主机上工作,部署到 Azure 时 Azure Active Directory 始终重定向到 '~/.auth/login/done'

c# - 在 Visual Studio 2019 中的编译器指令之间切换?

wpf - 如何在 WPF MVVM 中动态设置 View 的 DataContext

c# - MVVM 和 Prism - 如何处理 ViewModel 中的 TextBox_DragEnter 和 TextBox_Drop 事件

c# - 如何在 XAML 中动态访问元素名称?

具有多窗口处理的 WPF + MVVM

c# - 映射列表未从主列表中获取所有项目

c# - Linq-to-Entities 加入与 GroupJoin

c# - 如何在 Silverlight 中获取屏幕工作区(不是整个屏幕大小)的大小?