为什么我的ListView没有绑定到ItemSource?

Mar*_*nom 3 c# data-binding wpf listview mvvm

所以我有一个非常简单的UI设计,带有ListView和一个按钮.我想在点击按钮时填充列表视图.

 <Grid>
        <Button Click="ButtonBase_OnClick" Content="Button" HorizontalAlignment="Left" Margin="349,259,0,0" VerticalAlignment="Top" Width="75"/>

        <ListView Margin="10,10,10,202" Name="lvUsers" ItemsSource="{Binding SomeData.Users}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Name}" />
                </GridView>
            </ListView.View>
        </ListView>

    </Grid>
Run Code Online (Sandbox Code Playgroud)

我已将ListView的ItemSource属性绑定SomeData.Users为ObservableCollectiuon,它应在更新,添加,删除或刷新时通知UI.然后在我有列的下面我将DisplayMember绑定到Name可观察集合的属性.

这是SomeData班级

public class SomeData
    {
        public static ObservableCollection<User> Users { get; } = new ObservableCollection<User>();

        public static void Populate()
        {
            Users.Add(new User() { Name = "John Doe", Age = 42, Mail = "john@doe-family.com" });
            Users.Add(new User() { Name = "Jane Doe", Age = 39, Mail = "jane@doe-family.com" });
            Users.Add(new User() { Name = "Sammy Doe", Age = 7, Mail = "sammy.doe@gmail.com" });
        }
    }

    public class User
    {
        public string Name { get; set; }

        public int Age { get; set; }

        public string Mail { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

这是MainWindow.cs

public MainWindow()
        {
            InitializeComponent();
        }

        private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
        {
            SomeData.Populate();
        }
Run Code Online (Sandbox Code Playgroud)

afaik我不应该在任何地方设置DataContext ..对吗?

taq*_*ion 5

问题是您的Binding语法错误.您正在尝试绑定到静态属性,请尝试以下操作:

"{Binding Source={x:Static YourNameSpace:SomeData.Users}}"
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用的是WPF 4.5或更高版本:

"{Binding Path=(YourNameSpace:SomeData.Users)}"
Run Code Online (Sandbox Code Playgroud)

一个提示:像你这样的问题总是试着看看你的输出窗口并寻找System.Window.Data Error,这些通常是绑定表达式无法解析时发生的绑定异常.在你的情况下,我相信你会发现这个例外.