使用 MVVM 处理 UIElement

Handle UIElements with MVVM

我正在构建一个尽可能遵循 MVVM 的应用程序。它是一个 windows 8 商店应用程序,我正在使用 MVVM-light。现在假设我有一个使用 MainViewModel 的 MainPage,还有一个使用 UserViewModel 的 UserControl。 现在我希望能够在不使用任何代码隐藏的情况下在 MainPage 和 UserControl 之间进行通信。在这个简单的场景中,我想从 MainPage

中的按钮 "click" 我的 UserControl 中的一个按钮

MainPage.Xaml: 这里我有一个按钮,我希望用它单击 Usercontroll

中的一个按钮
 <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Button Content="MyButton"
                Command="MyCommand"></Button>   


 </Grid>

MainPageViewModel:

 public class MainViewModel : ViewModelBase
    {
        //
    }

UserControll.Xaml 这是我希望从 MainPage

单击的按钮
 <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
            <Button Content="UcButton"/>

     </Grid>

UserControlViewModel:

public class UserControlViewModel : ViewModelBase
        {
            //
        }

我有兴趣了解如何与遵循 MVVM 模式的 UI 元素进行交互。任何链接或提示表示赞赏。

执行此操作的 'clean'(MVVM 方式)是让 ViewModel 进行交互。

因此,如果 View1 应调用 View2 中的某些内容,则让 View1 在其 ViewModel1 上触发命令。然后 ViewModel1 应该联系 ViewModel2。 ViewModel2 将执行所需的操作并通过其属性显示结果。 View2 将绑定到属性并显示操作的效果。

ViewModel 之间的交互可以通过发布者-订阅者模型(消息代理、总线等)完成。在 MVVM-light 中,a Messenger class 保持依赖关系清晰。

我积分不够无法发表评论,而且这个问题似乎有点奇怪。您是要单击按钮以使其显示在 GUI 中,例如按钮变为蓝色还是要调用 usercontrolViewModel 中的命令。如果是后者,您可以像这样进行修复:

MainPage.xaml

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Button Content="MyButton"
            Command="{Binding  UserControlViewModel.SomeUserControlCommand, Source={StaticResource Locator}}"></Button>
    </Grid>

请记住检查您在 ViewModelLocator 中为 UserControlViewModel 指定的名称,您当然必须创建命令:UserControlViewModel 中的 SomeUserControlCommand。