You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将CreateObjects.cs中的静态列表绑定到MainPage的ListView控件?

当然可以实现!不过先得把你现有代码里的几个小问题修正一下,不然绑定肯定出问题。咱们一步步来解决:


第一步:修正CreateObject类的代码

你当前的代码里存在几个关键问题:静态列表Items没有初始化、AddNewItem方法缺少ID和Name的输入参数,还有一行多余的new List<FileItem>();。另外,为了让UI能自动响应集合的新增/删除操作,推荐用ObservableCollection代替List(它实现了集合变化通知接口)。修正后的代码如下:

// 确保Item类的定义完整
class Item
{
    public int ID { get; set; }
    public string Name { get; set; }

    public Item(int id, string name)
    {
        ID = id;
        Name = name;
    }
}

class CreateObject
{
    // 初始化静态可观察集合,确保全局唯一且能通知UI更新
    public static ObservableCollection<Item> Items { get; } = new ObservableCollection<Item>();

    // 给方法添加参数,用于传入新Item的ID和Name
    public static void AddNewItem(int id, string name)
    {
        Items.Add(new Item(id, name));
    }
}

第二步:将集合绑定到MainPage的ListView

有两种常用的绑定方式,你可以根据需求选择:

方式1:后台代码直接绑定

在MainPage.xaml中先定义ListView的模板:

<ListView x:Name="ItemListView">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal" Padding="5">
                <TextBlock Text="{Binding ID}" FontSize="16" Margin="0,0,15,0"/>
                <TextBlock Text="{Binding Name}" FontSize="16"/>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

然后在MainPage.xaml.cs的构造函数中设置数据源,并可以测试添加几个项:

public MainPage()
{
    this.InitializeComponent();
    
    // 直接绑定静态集合
    ItemListView.ItemsSource = CreateObject.Items;

    // 测试添加数据
    CreateObject.AddNewItem(1, "测试物品1");
    CreateObject.AddNewItem(2, "测试物品2");
}

方式2:纯XAML绑定(更简洁)

如果想完全在XAML中完成绑定,需要先引入你的类所在的命名空间(假设你的类在YourAppNamespace下),然后用x:Bind绑定静态属性:

<Page 
    x:Class="YourAppNamespace.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:YourAppNamespace">

    <ListView ItemsSource="{x:Bind local:CreateObject.Items, Mode=OneWay}">
        <ListView.ItemTemplate>
            <DataTemplate x:DataType="local:Item">
                <StackPanel Orientation="Horizontal" Padding="5">
                    <TextBlock Text="{x:Bind ID}" FontSize="16" Margin="0,0,15,0"/>
                    <TextBlock Text="{x:Bind Name}" FontSize="16"/>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Page>

这种方式用x:Bind比传统Binding更高效,还能获得编译时的类型检查。


额外优化:让Item属性变化也能更新UI

如果后续需要修改Item的ID或Name,希望UI自动同步,那么需要让Item类实现INotifyPropertyChanged接口:

using System.ComponentModel;
using System.Runtime.CompilerServices;

class Item : INotifyPropertyChanged
{
    private int _id;
    private string _name;

    public int ID
    {
        get => _id;
        set
        {
            if (_id != value)
            {
                _id = value;
                OnPropertyChanged();
            }
        }
    }

    public string Name
    {
        get => _name;
        set
        {
            if (_name != value)
            {
                _name = value;
                OnPropertyChanged();
            }
        }
    }

    public Item(int id, string name)
    {
        ID = id;
        Name = name;
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

这样修改Item的属性时,对应的UI内容会自动刷新。

内容的提问来源于stack exchange,提问作者user7342089

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:38:54