2

2 つの s (および)にバインドする必要があるObservableCollection<MyClass>名前があります。myCollectionCollectionViewSourceAllItemsSelectedItems

AllItemsの source プロパティは にバインドされていmyCollectionます。SelectedItemsのソース プロパティは、myCollectionアイテムにバインドする必要がありIsSelected == trueます。

public class MyClass : INotifyPropertyChanged
{
    //fields and interface implementations
    public string Name {//proper code};
    public bool? IsSelected {//proper code};
}

// some where else in the MainWindow
AllItems.Source = myCollection;
SelectedItems.Source = myCollection.Where(input=>input.IsSelected==true);

問題:ウィンドウが読み込まれると、すべて問題ありません。しかし、 のIsSelectedいくつかのアイテムの値myCollectionが変更されても、明らかに には影響しませんSelectedItems。したがって、この問題を克服するために、プロパティが変更さSelectedItemsれるたびにソース プロパティを更新します。IsSelected

質問:のソース プロパティを手動で更新する必要がないように、これらの種類のバインドを行うにはどうすればよいSelectedItemsですか?

タナクス。

4

2 に答える 2

1

まず、手動のフィルタリング設定を無条件に削除し、より適切なものに置き換える必要があります。何を置き換えるかの選択は、主に対象とする .NET バージョンによって異なります。

.NET 4.5 を対象とする場合、単純な解決策は、代わりにコレクション ビューでライブ フィルタリングを有効にすることです。

以前のバージョンの .NET では、何があっても手動で作業する必要がありますがRefresh、コントロールを再バインドするコレクション ビューを呼び出すだけの方が適切です。これを行うには、FilterXAML からイベント ハンドラーを設定して、フィルター処理をコレクション ビュー自体に任せる必要があります。

于 2013-04-02T13:04:24.843 に答える