如何动态地绑定ItemsControl

本文关键字:绑定 ItemsControl 动态 何动态 | 更新日期: 2023-09-27 18:18:54

我将List<>绑定到ItemsControl,如下所示:

<ItemsControl x:Name="myItemsControl" ItemsSource="{Binding MyList}" Grid.Row="1">

我需要在事件上动态地将此绑定更改为另一个List

如何做到这一点?我试了下面的方法,但是不起作用。

myItemsControl.ItemSource = MyListOther;

如何动态地绑定ItemsControl

您可以将MyList的引用更改为List<T>的另一个实例,或者您可以重新填充MyList引用的列表。

请注意,假设您正在使用MVVM设计模式,并且MyList是视图模型(即当前DataContext)上的属性,那么您应该在视图模型上实现INotifyPropertyChanged,并在MyList引用更改时调用PropertyChanged事件。

哦,这很简单,只要看看下面的代码,一切都应该清楚了。

XAML:

<ListBox Name="list" />

后台代码:

private List<string> collection = new List<string> { "test", "2", "3" };
public MainPage()
{
    InitializeComponent();
    Binding b = new Binding();
    b.Source = collection;
    list.SetBinding(ListBox.ItemsSourceProperty, b);
}

当然,需要这样的分辨率可能表明您的架构是不正确的。您应该使用MVVM (Model View ViewModel)设计模式,然后实现INotifyPropertyChanged接口来通知View列表更改。这样就不需要在后台代码中手动创建绑定。此外,您可以使用ObservableCollection<T>,它会自动通知Views,每次添加或删除新元素时使用此列表。

这些只是提示,供您在实现应用程序时考虑。如果您正在编写一些简单的测试代码,那么代码滞后并没有那么糟糕,但是在更大的应用程序中,请尝试MVVM方法。