2

MainWindow の下に 3 つの UserControls があります。各コントロールには、独自の保存ボタンがあります。Mainwindow には SaveAll ボタンがあります。

MainWindow には ContentControl があり、コンテンツ プロパティは VM にバインドされています。ButtonClickCommand の実行時に、ビューがインスタンス化され、コンテンツ プロパティに割り当てられます。

この SaveAll ボタンは、UserControls Save ボタンに関連付けられたメソッドを内部的に呼び出します。そのため、SaveAll には独自のメソッドがありません。

これは、DependencyProperty によって実装する必要があります。

このシナリオがビジネス アプリに実装されているのを見たことがありますが、どういうわけかその背後にある概念を見逃していました。

この背後にあるロジックはわかりませんが、非常に便利なことです。

今、私はこれを実装する必要がありますが、私は知らない小さなことを見逃しています.

シナリオが明確であることを願っています。

コードを使用して、このシナリオで私を助けてください。

ありがとう、VJ

4

2 に答える 2

1

MVVMについて言及したので、ここにあなたが探しているものがあります。Caliburn などの MVVM フレームワークを使用すると、これは非常にクリーンで簡単になりますが、このサンプルでは、​​単なるバニラ MVVM です。

public class MainViewModel
{
    public MainViewModel()
    {
        ViewOneModel = new SubViewModel();
        ViewTwoModel = new SubViewModel();
        Children = new List<SubViewModel>(new[] { ViewOneModel, ViewTwoModel });
    }

    public void SaveAll()
    {
        foreach(var child in Children)
        {
            child.Save();
        }
    }

    public IList<SubViewModel> Children { get; private set; }

    public SubViewModel ViewOneModel { get; set; }
    public SubViewModel ViewTwoModel { get; set; }
}

public class SubViewModel
{
    public void Save()
    {
    }
}

UI では、基本的にメイン ビューで構成されたサブビュー (UserControls) があります。

<StackPanel>
    <Button Width="100" Height="20" Content="Save All" />

    <local:ViewOne DataContext="{Binding ViewOneModel}" />

    <local:ViewTwo DataContext="{Binding ViewTwoModel}" />
</StackPanel>

ICommand インターフェイス (できれば RelayCommand インスタンス) を使用して、保存メソッドをボタンにバインドするだけです。

于 2011-05-18T06:58:10.670 に答える
0

このシナリオでは、RoutedEvents は必要ありません。私がそれを解決する方法: Sub-ViewModels で 3 つのプロパティを公開する Main-ViewModel があります。MainViewModel はウィンドウのデータ コンテキストであり、サブビューモデルは 3 つのユーザー コントロールのデータ コンテキストにバインドされます。

サブ vm は、Save-Command を使用してプロパティを公開しています。このコマンドは、ユーザーコントロールの保存ボタンにバインドされています。メインの vm は、SaveAll ボタンにバインドされている saveall コマンドでプロパティを公開しています。save all コマンドのハンドラーで、サブ vm を繰り返し処理し、save を呼び出します。

于 2011-05-18T06:51:03.280 に答える