Prism CustomRegionAdapter,允许多个?

问题描述 投票:0回答:0

这是一个很短的问题,但需要一个很长的解释。简而言之,在我们的WPF应用程序中,我们有一个叫做 Teleriks RadTabbedWindow(标签式窗口)如果用户点击new-tab-button,我们就会在数据源中添加一个新的ViewModel,每个ViewModel都和它的视图相连,有DataTemplate(见下文),没什么特别的。每个ViewModel都与它的视图相连,用DataTemplate(见下文),没什么特别的。

在控件中(如下图),我们绑定了Loaded-event。(这样) . 问题是它只在第一个Tab页上启动。假设我们创建了3个SearchHolderViewModels,即同一个控件的3个实例,每个Tab中一个。. 我只在第一个创建的控件上得到一个OnControlLoaded。用下面的代码,我 "手动 "触发LoadedCommand,然后就可以了。但这是解决问题的方法吗?为什么我们只在第一次得到事件,因为我认为这三个实例是不相关的。

我们使用的是 Teleriks RadTabbedWindow(标签式窗口),像这样,标记为MainWindow。

 <telerik:RadTabbedWindow x:Class="Porter.Application.Views.MainWindow"
    ...
    ItemsSource="{Binding WindowTabs}"                          
    SelectedItem="{Binding SelectedWindowTab, Mode=TwoWay}">

<telerik:RadTabbedWindow.Resources>
    <DataTemplate  DataType="{x:Type acc:SearchHolderViewModel}">
        <acc:SearchHolderView/>
    </DataTemplate>
    <DataTemplate DataType="{x:Type hello:HelloWorldViewModel}">
        <hello:HelloWorldView/>
    </DataTemplate>
</telerik:RadTabbedWindow.Resources> 

在ViewModel中,属性

private ObservableCollection<ITabbedWindowContent> _windowTabs;
public ObservableCollection<ITabbedWindowContent> WindowTabs
{
    get => _windowTabs;
    set { SetProperty(ref _windowTabs, value); }
}

private ITabbedWindowContent _selectedWindowTab;
public ITabbedWindowContent SelectedWindowTab
{
    get => _selectedWindowTab;
    set { SetProperty(ref _selectedWindowTab, value); }
}

ViewModel、ctor和OnTab-added-handler。

public MainWindowViewModel()
{
    NewTabWindowCommand = new DelegateCommand<string>(OnNewTabWindow);
    WindowTabs = new ObservableCollection<ITabbedWindowContent>() { new SearchHolderViewModel() };
}

private void OnNewTabWindow(string viewName)
{  
    switch (viewName)
    {
        case Navigation.RB_SearchAccountsView:
            var searachHolderVM = new SearchHolderViewModel(_eventAggregator);
            WindowTabs.Add(searachHolderVM);
            searchHolderVM.LoadedCommand.Execute();//added to simulate Loaded-event
            break;
        case Navigation.SA_HelloWorldView: 
            WindowTabs.Add(new HelloWorldViewModel()); 
            break;     
    } 
}
wpf telerik
© www.soinside.com 2019 - 2024. All rights reserved.