【问题标题】:How to bind two view with two viemodels together i wpf?如何将两个视图与两个 viemodel 绑定在一起我 wpf?
【发布时间】:2013-11-03 14:22:26
【问题描述】:

我如何绑定/连接到不同的视图,它们有自己的视图模型?

我有一个包含用户控件/视图的主窗口。它们中的每一个都有自己的 viewModel。第一个视图就像一个控制面板,带有一个用于向应用程序输入输入参数的表单。另一种是画布,根据控制面板上的输入参数显示分析结果。

例子:

主窗口:

    <StackPanel Orientation="Horizontal" Margin="0,20,0,0">
        <local:ControlView />
        <local:CanvasView />
    </StackPanel>

控制视图:

        <StackPanel Orientation="Horizontal">
             <Label Content="Length: " Margin="19,0,0,0"/>
             <TextBox Margin="3" Width="130" Text="{Binding Path=Box.Length}"/>
        </StackPanel>

        <StackPanel Orientation="Horizontal">
            <Button Margin="10" Content="Draw Canvas" Command="{Binding Path=DrawCanvasCmd}"/>
        </StackPanel>

按钮触发 ControlViewModel 中的 DrawCanvas 方法。然后调用该方法,我希望根据输入绘制画布。画布的绘制在 CanvasViewModel 中完成。

谁能看到这是怎么做到的?我可以使用 CanvasViewModel 构造函数中的静态值来绘制画布,即,我只需要将输入参数从控制面板发送到画布即可。

public void CanvasViewModel()
{
     GeometryFigure.length = 120;
}

【问题讨论】:

    标签: wpf mvvm view binding viewmodel


    【解决方案1】:

    如果您使用的是 MVVM 灯,您想使用 Messenger,它保存在 GalaSoft.MvvmLight.Messaging 中。

    基础教程:

    在主窗口视图模型中假设长度为整数

    private void DrawCanvas()
    {
         Messenger.Default.Send(Length, "SOME KIND OF UNIQUE TOKEN");
    }
    

    在 CanvasViewModel 的构造函数中

    public void CanvasViewModel()
    {
         Messegner.Default.Register<int>(this, "SOME KIND OF UNIQUE TOKEN", Draw);
    }
    

    在 CanvasViewModel 的其他地方创建您在寄存器中调用的方法:

    private void Draw(int length)
    {
        Do whatever you want to do with the length....
    }
    

    “某种独特的令牌”可以是任何东西,但请注意,如果您使用过于通用的东西,您使用相同令牌注册的任何 Messenger 都会触发。我个人使用枚举器。另外,当您注册时,请确保您发送的类型正确。

    它的作用是发送一个通知,其中包含已发送的值和令牌。如果有任何东西被注册以接收该类型的值,使用那个确切的令牌,它将调用它注册的方法。这也非常适合测试,因为您可以在测试方法中注册以确保事件被触发并被接收,而无需涉及视图。

    【讨论】:

      【解决方案2】:

      如果您使用 PRISM 框架,您可以使用 EventAggregator,您可以创建自己的基于 Mediator Pattern 的 EventAggregator。你也可以在HereHere

      【讨论】:

      • 我正在使用 MVVM light,我对此很陌生。所以我从来没有听说过 EventAggregator 或 Mediator Pattern。学习/实施难吗?或者你知道一个小代码示例或可以引导我走向正确方向的东西
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多