Silverlight UserControl 和他自己的 Viewmodel 托管在 View 中

标签 silverlight user-controls mvvm

我想制作一个可重用的 UserControl 为:

  • 一个 VIEW 有自己的 VIEWMODEL 逻辑数据恢复在哪里
  • 此 UserControl(或 View ?)有一个按钮“OK”,用于在他的 View 模型
  • 中定位 RELAYCOMMAND
  • 我在另一个 VIEW ('MainPage') 中托管这个 'UserControl',她自己有它的 View 模型

  • 我的问题是:
    如何使用我的 UC 概述的值来定位我的“MainPage”的 VIEWMODEL 属性?

    最佳答案

    只要您的用户控件包含在您的主页中,它将继承主页 View 模型。这是默认设置,除非您通过数据绑定(bind)或代码显式更改数据上下文,否则它适用。

    如果您的用户控件绑定(bind)到它自己的 View 模型,那么您可以让主视图模型包含 subview 模型的实例并通过公共(public)属性公开它。现在,您可以通过将 DataContext 属性绑定(bind)到主视图模型上的属性来设置用户控件的数据上下文。

    最后,如果您的 subview 模型引用了主视图模型,那么它们将能够根据需要进行通信。

    编辑:

    我将尝试设置一个简单的示例:

    首先是 View 模型:

    public class MainPageViewModel
    {
    
      public MainPageViewModel()
      {
         ChildViewModel = new ChildViewModel(this);
      }
    
      public ChildViewModel {get; private set; }
    
      public ICommand OkCommand { get { // return the command here }}
    }
    
    public class ChildViewModel
    {
      private MainPageViewModel _parentViewModel;
      public ChildViewModel(MainPageViewModel parentViewModel)
      {
        _parentViewModel = parentViewModel;
      }
    
      // Returns the command from the main page view model
      public ICommand OkCommand { get { return _parentViewModel.OkCommand; } }
    
      // Other properties as well
    }
    

    这里我们的主视图模型具有 subview 模型作为属性。 subview 模型公开了从主视图模型返回值的 OkCommand。

    现在在您的主页 xaml 中,您可以执行以下操作:
    <uc:MyUserControl DataContext="{Binding ChildViewModel}" />
    

    在这里,您插入您的用户控件并将其数据上下文设置为子用户控件 View 模型。

    关于Silverlight UserControl 和他自己的 Viewmodel 托管在 View 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3667698/

    相关文章:

    c# - 从代码启动音乐应用程序

    asp.net-mvc - 如何创建 MVC 用户控件

    mvvm - Kendo UI Observable 计算属性如何强制更改通知

    c# - 在 StackPanel WPF 中使用 MouseOver

    c# - WCF Silverlight HTTP 和 HTTPS

    wpf - 与 d :DataContext. 的可混合性我错过了什么?

    c# - 如何在 Sharepoint 2007 Web 部件中托管 Silverlight 应用程序

    wpf - 使用 XAML/WPF 实现复杂曲线编辑器的策略

    c# - 如何使用 C# 控制 Windows 中的任务栏

    wpf - 使用 Entity Framework 和 IDataErrorInfo 进行业务逻辑验证