3

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

有没有办法为视图创建一个工厂,以便动态创建它,而不用担心它的数据上下文来自消耗它的控件?

4

1 回答 1

1

您可以使用定位器模式

前任:

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

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


}
于 2013-10-25T09:56:04.433 回答