c# - MVVM 中 View 的工厂

标签 c# wpf mvvm factory

ContextMenu 有一个用户控件,它将在其他用户控件中重复使用。问题是想要使用此 Contextmenu 的控件需要创建 ContextMenuViewModel 并填充其 DataContext,这是正常做法。

有没有办法为 View 创建一个工厂,这样它就可以即时创建,而不用担心来自正在使用它的控件的数据上下文?

最佳答案

你可以使用定位器模式

例如:

“定位器”的使用,例如:

DataContext="{Binding Main, Source={StaticResource Locator}}">

在应用程序中创建了定位器。

<Application x:Class="XXX.App"
             xmlns:views="clr-namespace:XXX.Views"
             xmlns:vm="clr-namespace:XXX.ViewModels"
             StartupUri="MainWindow.xaml"
             >
    <Application.Resources>
...
        <vm:ViewModelLocator x:Key="Locator"  />   
...     
    </Application.Resources>
</Application>

“定位器”类:

public class ViewModelLocator
{            
   private static MainViewModel _main;    

   /// Initializes a new instance of the ViewModelLocator class.

   public ViewModelLocator()            
   {                
      _main = new MainViewModel();            
   }    

  /// Gets the Main property which defines the main viewmodel.            

  public MainViewModel Main
  {                
     get                
       {              
       return _main;                
       }            
  }        


}

关于c# - MVVM 中 View 的工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19112091/

相关文章:

c# - 连续显示字符串的字符并为标签 c# 制作计时器

c# - 带有可折叠项目的 ListView?

wpf - 如何推迟对 WPF 中的绑定(bind)的更新

c# - 多级 tabcontrol - 我们使用哪个集合来绑定(bind) mvvm

c# - 如何使用 CI(持续集成)运行 Selenium 测试?

c# - 如何用c#代码创建LongListSelector?

c# - Html.DropDownList 从列表中选择值<string>

c# - 如何将 DataGrid 单元格值复制到剪贴板

wpf - 如何在 WPF 中单击(组合框打开)时更改组合框背景颜色?

database - Windows 手机 7 : MVVMLight and Messenger