Как сделать привязку ItemsControl динамически - PullRequest
0 голосов
/ 28 декабря 2011

Я связываю List<> с ItemsControl, как показано ниже:

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

Мне нужно динамически изменить эту привязку на другую List для события.

Как это сделать? Я попробовал следующее, но не работает.

myItemsControl.ItemSource = MyListOther;

Ответы [ 2 ]

2 голосов
/ 28 декабря 2011

О, это довольно просто, просто посмотрите на приведенный ниже код, и все должно быть ясно.

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 подход.

2 голосов
/ 28 декабря 2011

Вы можете изменить ссылку MyList на другой экземпляр List<T>, или вы можете просто снова заполнить список, на который ссылается MyList.

Обратите внимание, что если вы используете шаблон проектирования MVVM и MyList является свойством вашей модели представления (которая является текущим DataContext), то вам следует реализовать INotifyPropertyChanged в вашей модели представления и вызвать PropertyChanged событие, когда ваша ссылка MyList изменяется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...