如何动态绑定ItemsControl

时间:2011-12-28 19:24:40

标签: c# silverlight silverlight-4.0

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

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

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

怎么做?我尝试了以下方法,但没有用。

myItemsControl.ItemSource = MyListOther;

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

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

这些只是您在实施应用程序时需要考虑的提示。如果您只是编写一些简单的测试代码,那么代码背后的代码并不是那么糟糕,但在更大的应用程序中尝试{{1}}方法。