wpf - 如何将两个 View 与两个 viemodel 绑定(bind)在一起我 wpf?

标签 wpf mvvm view binding viewmodel

如何绑定(bind)/连接到不同的 View ,它们有自己的 View 模型?

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

例子:

主窗口:

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

控制 View :
        <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 的方法。然后调用该方法,我希望根据输入绘制 Canvas 。 Canvas 的绘制在 CanvasViewModel 中完成。

谁能看到如何做到这一点?我可以使用 CanvasViewModel 构造函数中的静态值来绘制 Canvas ,即,我只需要将输入参数从控制面板发送到 Canvas 即可。
public void CanvasViewModel()
{
     GeometryFigure.length = 120;
}

最佳答案

如果您使用的是 MVVM 灯,则要使用 GalaSoft.MvvmLight.Messaging 中的 Messenger。

基础教程:

在主窗口 View 模型中假设长度是一个整数

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....
}

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

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

关于wpf - 如何将两个 View 与两个 viemodel 绑定(bind)在一起我 wpf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19753970/

相关文章:

c# - 如何从线程更新 WPF 应用程序中的 UI?

c# - WPF MVVM ObservableCollection/DataGrid 多个 Sql 表

c# - 如何使用 WPF MVVM 缩短代码?

php - 将数据从 Controller 传递到 Blade View laravel

java - 从列表 Activity 中删除 ContentView

wpf - 如何使用 WPF 创建分层组合框?

c# - 为什么异常不会在 WPF 对话框关闭事件处理程序之外冒泡?

mvvm - Silverlight/MVVM 设计 : what is my model and where to put the logic?

zend-framework - 最佳实践 : Zend View: Load content from database and render PHP-code included in content

wpf - 使用 MVVM 构建应用程序