Prism CustomRegionAdapter, разрешить несколько - PullRequest
0 голосов
/ 17 июня 2020

Это короткий вопрос, но требует подробного объяснения. Короче говоря, в нашем WPF-приложении у нас есть Teleriks RadTabbedWindow , который привязан к данным для списка моделей просмотра, и если пользователь нажимает кнопку новой вкладки, мы добавляем новую модель просмотра в источник данных. Каждая ViewModel связана со своим представлением с помощью DataTemplate (см. Ниже), ничего особенного.

В элементах управления (ниже) мы связали Loaded-event (вот так) . Проблема в том, что он срабатывает только на первой вкладке. Допустим, мы создаем 3 SearchHolderViewModels, ie 3 экземпляра одного и того же элемента управления, по одному на каждой вкладке. . Я получаю OnControlLoaded только для первого созданного Control. С помощью приведенного ниже кода я "вручную" вызываю LoadedCommand, и это работает. Но есть ли это путь к этому? И почему мы получаем событие только в первый раз, так как я вижу, что 3 экземпляра не связаны

Мы используем 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;     
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...