0

MVVM に続いて、XAML で定義されたオブジェクトである UI ウィンドウの存在と共に永続化されたオブジェクトがあります。このオブジェクトは ModelView を表すため、モデルを変更できるコントロールが含まれています。私は自分FrameworkElement.FindResource("myResource")がすべてのユーザーコントロールを求めていることに気づきました。このオブジェクトのインスタンスを取得する適切な方法は何ですか?

XAML:

<p:MyModelView x:Key="modelView" />

分離コード:

//for every control I call:
public void SomeEventHandler(object _sender, EventArgs _someEventArgs) {
    MyModelView repeatedCode= this.FindResource("modelView")
    repeatedCode.DoSomeModificationRelatedToControl(args[] someArgs);
}
4

1 に答える 1

1

View のコード ビハインドの多くの場所で ViewModel が必要な場合は、Xaml でリソースとして作成するのではなく、コード ビハインドの変数に ViewModel を作成して保持します。例えば:

public partial class MainWindow : Window
{
    private MainViewModel _vm;

    public MainWindow()
    {
        InitializeComponent();

        _vm = new MainViewModel()
        {
            Name = "MyViewModel",
            ...
        };
        this.DataContext = _vm;
    }

最後の行は重要です。ViewModel をビューの DataContext にすることで、通常のように Xaml でバインドできます。

これで、イベント ハンドラーが少なくとも 1 ~ 2 行短くなります。

public void SomeEventHandler(object sender, EventArgs someEventArgs)
{
    _vm.DoSomeModificationRelatedToControl(someArgs);
}
于 2013-01-19T00:36:21.383 に答える