【问题标题】:How to bind Items to Listview in WPF [duplicate]如何在WPF中将项目绑定到Listview [重复]
【发布时间】:2018-07-31 06:27:17
【问题描述】:

对不起,我的英语不好。 这是我的问题:

我的 Listview,我想你看到了我的问题:

这是我的代码:

<ListView ItemsSource="{Binding Name}" SelectionChanged="lvUsers_SelectionChanged" Margin="10" Name="lvUsers">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Name" Width="120"/>
                <GridViewColumn Header="Age" Width="50"/>
                <GridViewColumn Header="Mail" Width="150"/>
            </GridView>
        </ListView.View>
    </ListView>

这里是c#代码:

public partial class MainWindow : Window
{
    List<User> items = new List<User>();
    public MainWindow()
    {
        InitializeComponent();
        items.Add(new User() { Name = "John Doe", Age = 42, Mail = "john@doe-family.com" });
        items.Add(new User() { Name = "Jane Doe", Age = 39, Mail = "jane@doe-family.com" });
        items.Add(new User() { Name = "Sammy Doe", Age = 7, Mail = "sammy.doe@gmail.com" });
        DataContext = items;
    }
}

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

    public int Age { get; set; }

    public string Mail { get; set; }
}

我想将列表项绑定到我的列表视图。

感谢您的帮助!

【问题讨论】:

  • 您似乎正在使用this 教程。解决方案是删除ItemsSource="{Binding Name}",因为您使用的是DataContext = items;。并将您的 GridViewColumn 绑定到正确的项目属性{Binding Name}{Binding Age}{Binding Mail}
  • 谢谢大家!!!它的工作原理!!!

标签: c# wpf


【解决方案1】:

我自己并没有太多使用 WPF,但我猜测什么可以解决您的问题:

替换这一行:

DataContext = items;

用这一行:

DataContext = this;

您希望将 DataContext 绑定到一个类,而不是一个特定的集合(我可能会创建一个单独的类,称为 MainWindowViewModel 中的某些东西,但一次只做一个)。

然后在 ListView 的第一个标签中:

<ListView ItemsSource="{Binding Name}" SelectionChanged="lvUsers_SelectionChanged" Margin="10" Name="lvUsers">

用这一行替换它:

<ListView ItemsSource="{Binding items}" SelectionChanged="lvUsers_SelectionChanged" Margin="10" Name="lvUsers">

您希望您的 ItemsSource 成为集合的名称,而不是您真正想从该集合中使用的名称。

这意味着您可以稍后在 ListView 中使用 set 绑定来访问集合属性:

{Binding Name} , {Binding Age} , {Binding Mail}

【讨论】:

    【解决方案2】:

    因此,更改 xaml 代码以使您的代码正常工作:

    <ListView ItemsSource="{Binding }" SelectionChanged="lvUsers_SelectionChanged" Margin="10" Name="lvUsers">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Name" 
                                DisplayMemberBinding="{Binding Name}" Width="120"/>
                <GridViewColumn Header="Age"
                                DisplayMemberBinding="{Binding Age}" Width="50"/>
                <GridViewColumn Header="Mail"
                                DisplayMemberBinding="{Binding Mail}" Width="150"/>
            </GridView>
        </ListView.View>
    </ListView>
    

    这些都是需要的更改。您可以通过使用 MVVM 原则来改进您的代码,分离您的代码,通知类以允许 UI 在您从集合中添加/删除元素时更新。

    希望这会有所帮助, 西尔维乌。

    【讨论】:

      【解决方案3】:

      只需使用下面一行

      <ListView ItemsSource="{Binding items}" SelectionChanged="lvUsers_SelectionChanged" Margin="10" Name="lvUsers">
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-28
        • 1970-01-01
        • 2011-01-09
        • 2021-11-13
        • 1970-01-01
        相关资源
        最近更新 更多