2011-12-28 7 views
0

私はItemsControlList<>を結合していますのItemsControlの結合を行う方法:は、以下に示すように、動的に

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

を私はイベントに、この別のListへの動的バインディングを変更する必要があります。

これを行う方法?私は以下を試みたが、うまくいかなかった。

myItemsControl.ItemSource = MyListOther;

+0

こちらをご覧くださいhttp://stackoverflow.com/questions/6150456/one-stack-panel-for-each-record-inside-table/6151374#6151374 –

答えて

2

あなたはList<T>の別のインスタンスにMyListの参照を変更したり、単にそのMyList参照リストを再作成することができます。あなたはMVVMデザインパターンを使用して、そしてMyListは(現在のDataContextである)あなたのビューモデルのプロパティであるとされていると仮定すると、あなたはあなたのビューモデルにINotifyPropertyChangedを実装する必要があり、そしてときにPropertyChangedイベントを呼び出すこと

注意MyList参照が変更されます。

+0

ok。私はMVVMを知らない。 MVVMパターンを理解するためにどのようなリソースをお勧めしますか? – devnull

+0

http://www.wintellect.com/cs/blogs/jlikness/archive/2010/04/14/model-view-viewmodel-mvvm-explained.aspxは良い紹介です。また、MVVMフレームワークを使用する場合は、Caliburn.Microを推奨します。http://caliburnmicro.codeplex.com/ – devdigital

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というアプローチを試してみてください。

関連する問題