在我的应用程序中,我通常使用不带任何参数的 ViewModel 构造函数,并从 xaml 中找到我的 ViewModel,如下所示。
<UserControl.Resources>
<ResourceDictionary>
<vm:TabViewModel x:Key ="vm" ></vm:TabViewModel>
</ResourceDictionary>
</UserControl.Resources>
通过使用它,我可以在设计时在 xaml 中轻松引用我的 ViewModel 属性。
<Grid x:Name="grid" DataContext="{Binding Source={StaticResource ResourceKey=vm}}">
但是,由于我会在两个 ViewModel 之间进行通信,因此我开始使用Prism 6(事件聚合器)。
public TabViewModel(IEventAggregator eventAggregator)
{
this.eventAggregator = eventAggregator;
tabPoco = new TabWindowPoco();
tabPoco.Tag = "tag";
tabPoco.Title = "Title";
tabPoco.ListDataList = new ObservableCollection<ListData>();
tabPoco.ListDataList.Add(new ListData() { Name = "First", Age = 10, Country = "Belgium" });
tabPoco.ListDataList.Add(new ListData() { Name = "Second", Age = 11, Country = "USA" });
tabPoco.ListDataList.Add(new ListData() { Name = "Third", Age = 12, Country = "France" });
}
我正在使用Bootstrapper加载应用程序。
由于我使用的是 IEventAggregator,我不得不使用 prism:ViewModelLocator.AutoWireViewModel="True" 来定位 ViewModel。否则,应用程序不会运行。现在,我无法将 ViewModel 用作资源,也无法将其附加到 DataContext。
我不希望 Prism 自动定位相应的 ViewModel,我想控制它。我想在 xaml 中找到它并将其分配给 DataContext。
有谁知道我如何实现这一目标?