与集合对象的 WPF 数据绑定

2024-04-15

我有一个简单的类,定义如下:

public class Person
{
    int _id;
    string _name;

    public Person()
    { }

    public int ID
    {
        get { return _id; }
        set { _id = value; }
    }

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }
}

它存储在数据库中,通过更多代码,我将其放入 ObservableCollection 对象中,以便稍后尝试在 WPF 中进行数据绑定:

 public class People : ObservableCollection<Person>
{
    public People() : base() { }

    public void Add(List<Person> pListOfPeople)
    {
        foreach (Person p in pListOfPeople) this.Add(p);
    }
}

在 XAML 中,我自己有一个 ListView,当它从数据库更新时,我想为“People”对象中的每个项目填充一个 ListViewItem(由文本块组成)。我还希望该文本块绑定到 Person 对象的“Name”属性。

我一开始以为我可以这样做:

lstPeople.DataContext = objPeople;

其中 lstPeople 是我的 XAML 中的 ListView 控件,但这当然没有任何作用。我在网上找到了大量示例,其中人们通过 XAML 创建对象,然后通过 XAML 绑定到该对象;但不是我们绑定到实例化对象并相应地重新绘制的地方。

有人可以给我一些建议吗:

A) 如何将 ListView 控件绑定到我实例化的“People”集合对象?

B) 如何将模板应用到 ListView 以针对集合中的对象设置其格式?

即使链接到一个像样的示例(请不要对 XAML 中声明的对象进行操作)也将受到赞赏。


你们是如此接近。

lstPeople.ItemsSource = objPeople; // :)

您唯一需要的另一件事是如何为集合中的每个项目应用视图。没问题。我不会使用 ListView...我只会使用 ItemsControl 因为它更简单一些。

<ItemsControl x:Name="lstPeople">
    <ItemsControl.ItemTemplate>
         <DataTemplate>
              <TextBlock Text="{Binding Name}" />
         </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

差不多就这样了。 Listview 的策略是相同的,但您需要提供更多的 XAML 来提供列标题和内容。我不能 100% 确定你现在需要这个,所以我把它省略了。

Edit:这是“AddRange”的扩展方法,它将通过子类化 ObservableCollection 来完成您想要做的事情。有点容易......特别是如果你最终有很多集合类型(你会的)

public static void AddRange<T>(this ObservableCollection<T> collection, IEnumerable<T> items)
{
     foreach(var item in items)
     {
          collection.Add(item);
     }
}

然后你可以这样做:

ObservableCollection<Person> peeps = new ObservableCollection<Person>();
peeps.AddRange(new List<Person>
{ 
     new Person() { Name = "Greg" }, 
     new Person() { Name = "Joe" } 
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与集合对象的 WPF 数据绑定 的相关文章

  • 如何知道 WPF 中的控件(或窗口)何时被渲染(绘制)?

    我需要将窗口的内容存储到图像中 保存并关闭窗口 如果我在 加载 事件上关闭窗口 则图像包含窗口 其中某些项目绘制正常 其他一些项目仅绘制了一半或扭曲 而其他项目则不在图像上 如果我设置一个计时器并在一定时间后关闭窗口 250 毫秒到 1 秒
  • Scala 条件列表构造

    我正在使用 Scala 2 9 2 并且想根据某些条件构建一个列表 考虑以下情况 其中 cond 是采用谓词 p 和类型 T 的值 在本例中为 t3 的某个函数 t1 t2 cond p t3 t4 我想要的行为如下 如果 p 为真 则应给
  • WPF C# 输入框

    我正在使用 C 构建 WPF 应用程序 我想弹出一个对话框提示用户输入他 她的名字 之后 我将跟踪该名称并将一些数据保存到 txt使用该名称的文件 例如 输入的名称是姓名 约翰 所以我有数据数据 1 2 3 然后我将 数据 保存在John
  • 如何从流集合中删除最后一个元素 (DockerClient)

    您好 我有一个流集合 我按创建日期对其进行排序 我需要从此集合中删除所有元素 但较少删除最后一个元素 这是我的代码 List
  • 将固定文档/XPS 打印为 PDF,而不显示文件保存对话框

    我有一个FixedDocument我允许用户在 WPF GUI 中预览 然后打印到纸张上 而不显示任何 Windows 打印对话框 如下所示 private void Print PrintQueueCollection printQueu
  • 如何使用 linq 通过主键组合三个对象列表

    我正在尝试合并 3 个对象列表 我有一个人员列表 地址列表和地址关系列表 我想将这些列表组合成一个按 person id 排序的新列表 将其用作列表视图的数据源 然后能够访问 aspx 页面中的属性 这可能吗 Roughly using S
  • Hashset - 创建 Set 后使对象相同

    如果我们在 HashSet 中添加两个不同的对象 可变的 然后通过调用 setter 更改对象的值 使它们相同 则大小仍然是 hashSet 的 2 我无法理解其原因 public static void main String args
  • 带有移动向前/向后按钮的自定义列表框

    我有一个带有左 右重复按钮的自定义列表框 可以使用内容模板滚动其内容 如下所示
  • 创建自定义 scala 集合,其中映射默认返回自定义集合?

    特质TraversableLike A Repr 允许人们在其中进行收藏some函数将返回一个Repr 而其他人则继续返回类型参数That在功能上 有没有办法定义一个CustomCollection A 其中函数如map 其他的默认That
  • GridSplitter 从右侧调整大小 - 奇怪的行为

    使用 Kaxaml 从左侧调整大小可以按预期工作
  • 当通过 Map.put(K, V) 添加值时,是否必须通过 Map.get(K) 返回相同的实例?

    假设您有以下代码 Map
  • jQuery 模板插件:如何创建双向绑定?

    我开始使用 jQuery 模板插件 微软创建的 但现在我面临这个问题 模板用于绑定到对象数组的一堆表单 当我更改其中一个表单上的某些内容时 我希望更新绑定的对象 但我不知道如何自动执行该操作 这是一个简单的例子 现实生活中的模板和对象要复杂
  • 频繁插入已排序的集合

    我已经对集合 列表 进行了排序 并且我需要始终保持其排序 我目前在我的集合上使用 List BinarySearch 然后在正确的位置插入元素 我也尝试过在每次插入后对列表进行排序 但性能不可接受 有没有一种解决方案可以提供更好的性能 也许
  • 如何使用故事板更改wpf中网格行的高度

    我有一个Grid有 2 行
  • 如何识别单击的按钮属于哪个列表框项?

    在 WPF 编程中 我在编写按钮单击事件处理程序时遇到问题 因为该按钮位于列表框项目 数据模板的一部分 内 当单击该按钮时 我无法判断它属于哪个项目 有什么解决办法吗 求救 您似乎已将列表框绑定到集合 并且您的按钮是数据模板或项目模板的一部
  • RichTextbox SelectionStart 返回错误的索引

    我需要向用户显示光标上文本的选择开始和长度 就像在 notepad exe 中一样 选择长度没有问题 因为 Richtextbox 支持带有开始和结束的选择属性 http msdn microsoft com en us library s
  • 何时为 WPF/MVVM 使用事件和命令?

    我正在练习如何使用 MVVM 模式编写 WPF 应用程序 到目前为止 我还没有在我的代码中使用命令 在我的视图模型中我实现INotifyPropertyChanged并使用 事件PropertyChangedEventHandler Pro
  • 使用 Junit5 对 LiveDataobserverForever 进行单元测试会导致 NullPointer 异常

    我正在使用 Android 数据绑定来监听实时数据更改 并且我想观察视图模型级别的更改 而不是观察片段 然后向视图模型发送回调 这observerForever很有趣 因为它对我有用 但是 当我运行测试时 出现以下错误 java lang
  • 将链接对象转换为流或集合

    我想迭代堆栈跟踪 堆栈跟踪由可抛出对象组成 其 getCause 返回下一个可抛出对象 最后一次调用 getCause 返回 null 示例 a gt b gt null 我尝试使用 Stream iterable 这会导致 NullPoi
  • WPF 从主线程以外的其他线程截屏

    我有一个线程用于侦听 WPF 应用程序的命令 如果 WPF 应用程序收到截取屏幕截图的命令 则任务将移交给 screenshotService 我在互联网上的某个地方找到了一些代码来截取屏幕截图 似乎可以工作 但我还没有想清楚 我无法从另一

随机推荐