0

私のプロジェクトでは、ユーザー コントロールにリストを表示したいと考えています。そのために、リストを表示したいリストビューコントロールを持つユーザーコントロールのCategoryViewがあります。そしてCategoryViewModel。ViewModel には list-property があり、プロパティ変更イベントも発生させます。

public class CategoryViewModel : NotificationObject
{
    private List<string> categoryList;

    public List<string> CategoryList
    {
        get
        {
            return this.categoryList;
        }
        set
        {
            this.categoryList = value;
            this.RaisePropertyChanged("CategoryList");
        }
    }
}

このリストは、ビューの ListView 要素にバインドされます。

CategoryViewModel のリストを変更すると、正常に機能し、プロパティ変更イベントが発生します。List を MainWindowViewModel から変更した場合。プロパティ変更イベントは発生せず、ビューは更新されません。どうすればいいですか?

MainWindowViewModel で、CategoryList を変更します。リストは正しく入力されます。

CategoryViewModel categoryViewModel = new CategoryViewModel();
categoryViewModel.CategoryList = logger.ReadLogfile(this.logFileName).ToList();
4

1 に答える 1

1

あなたは少し混乱しているようです。に 1 つListViewありますCategoryView UserControl。そのItemsSourceプロパティは1 つのコレクションにのみデータ バインドできます。そのため、明らかに、メイン ビュー モデルのコレクションを変更するとCategoryViewModel、1 つのみが に影響しListViewます。

あなたのコードから、 が のCategoryViewModelとして設定されているように見えるDataContextためUserControl、メイン ビュー モデルのコレクションは に接続されませんListView。代わりに からメイン ビュー モデルのコレクションにデータ バインドする場合は、代わりListViewに を使用する必要があります。RelativeSource Binding

<ListView ItemsSource="{Binding SomeCollection, RelativeSource={RelativeSource 
    AncestorType={x:Type YourPrefix:YourParentType}}}" ... />

それでも、あなたのコレクションはCategoryViewModelもう接続されていないので、ここで何をしたいのかを正確に決めた方がよいでしょう。

于 2014-03-14T16:52:41.027 に答える