繁体   English   中英

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

[英]Why is my ListView not binding to the ItemSource?

所以我有一个非常简单的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>

我已绑定ListView控件的属性的ItemSource是SomeData.Users这是一个ObservableCollectiuon时,它的更新,应通知用户界面,添加,删除或更新。 然后在我有列的下面我将DisplayMember绑定到observable集合的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; }
    }

这是MainWindow.cs

public MainWindow()
        {
            InitializeComponent();
        }

        private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
        {
            SomeData.Populate();
        }

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

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

"{Binding Source={x:Static YourNameSpace:SomeData.Users}}"

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

"{Binding Path=(YourNameSpace:SomeData.Users)}"

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

您必须为xaml设置DataContext。

将datacontext添加到mainwindow

public MainWindow()
{
       InitializeComponent();
       this.DataContext = new SomeData();
}

并将xaml ItemsSource绑定更改为

ItemsSource="{Binding Users}"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM