Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将ItemSource绑定到listbox_C#_Xaml - Fatal编程技术网

C# 将ItemSource绑定到listbox

C# 将ItemSource绑定到listbox,c#,xaml,C#,Xaml,这个问题以前可能被问过很多次,但我看到了太多的答案,我真的不知道该怎么办 我有一个列表框: <listbox ItemSource="{Binding listitems}"> <ListBox.ItemTemplate> <DataTemplate> <grid> <Textblock text="{Binding value1}">

这个问题以前可能被问过很多次,但我看到了太多的答案,我真的不知道该怎么办

我有一个列表框:

<listbox ItemSource="{Binding listitems}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <grid>
                <Textblock text="{Binding value1}">
                <Textblock text="{Binding value2}">
            </grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</listbox>

我有以下课程的列表:

List<Items> listitems = new List<Items>();
public class Items
{
    public string value1 { get; set; }
    public string value2 { get; set; }
}
List listitems=new List();
公共类项目
{
公共字符串值1{get;set;}
公共字符串值2{get;set;}
}
有时,列表会被更新(添加了更多元素),我想让listbox知道列表已经更新,并相应地更新UI

此时,我手动将列表绑定到c#中的列表框,当列表框发生变化时,我清除列表框并再次添加列表,这是不需要的


我想知道listbox如何自动更新?

而不是通用的
列表
,使用它在内部实现负责更新UI上元素的
INotifyCollectionChanged
接口

ObservableCollection<Items> listitems = new ObservableCollection<Items>();
XAML-

<Listbox ItemSource="{Binding Listitems}">

您必须将
列表
更改为
可观察收集
,并根据MVVM模式实现所有功能

public ObservableCollection<Items> Listitems 
{
    get { return _listitems ; }
    set
    {
        _listitems  = value;
        RaisePropertyChanged(() => Listitems );
    }
}
公共可观测集合列表项
{
获取{return\u listitems;}
设置
{
_列表项=值;
RaisePropertyChanged(()=>Listitems);
}
}

您必须对
项中的每个属性执行相同的操作。也用于绑定。您可以在网上找到许多不错的教程,如

如果您使用的是列表,那么您必须使用INotifypropertyChanged进行通知,否则您可以使用ObservableCollection


还必须使用NotifyOnSourceUpdated=True。

当我使用ObservableCollection listitems=new ObservableCollection()时,UI仍然不会更新,但如果没有MVVM模式,还有其他方法可以做到这一点吗?问题是我的应用程序几乎完成了,这是我最后的步骤之一。修复了它!但我会研究Prism的东西,并在我的下一个应用程序中使用它:)你需要使用属性而不是字段。请参阅更新的答案。不能与XAML中的字段绑定。
public ObservableCollection<Items> Listitems 
{
    get { return _listitems ; }
    set
    {
        _listitems  = value;
        RaisePropertyChanged(() => Listitems );
    }
}