Как исправить, ViewModel не привязывается к View с использованием библиотеки Prism - PullRequest
0 голосов
/ 03 января 2019

Я разрабатываю приложение WPF, в котором я использую Prism с Unity IOC.Для всех других представлений, которые отображаются при запуске приложения, они, кажется, связываются соответствующим образом с предполагаемой виртуальной машиной (автоматически подключенной через призму).Тем не менее, когда я перехожу к другому представлению (которое является элементом управления с вкладкой, на данный момент только одним), я не могу связать кнопки с командами или TextBlock для вывода свойств из виртуальной машины.Обратите внимание, что это нормально работает в домашнем представлении и представлениях в его регионах.

Помимо указания призмы на автоматическое подключение виртуальной машины, я попытался назначить DataContext в XAML из представления, назначив DataContext из кода.позади.Я даже добавил первый код, приведенный ниже, в свой загрузчик, чтобы определить модель представления, к которой разрешается призма, и, как представляется, это предполагаемая виртуальная машина при отладке.Кроме того, добавление точки останова к моему классу VM во всех вышеописанных случаях показывает, что экземпляр VM был создан.// Добавил это в мой загрузчик, чтобы проверить защищенное переопределение viewModelName void ConfigureViewModelLocator () {base.ConfigureViewModelLocator ();

    ViewModelLocationProvider.SetDefaultViewTypeToViewModelTypeResolver(x =>
    {
        var viewName = x.FullName;
        viewName = viewName.Replace(".Views.", ".ViewModels.");
        var viewAssemblyName = x.GetTypeInfo().Assembly.FullName;
        var suffix = viewName.EndsWith("View") ? "Model" : "ViewModel";
        var viewModelName = string.Format(CultureInfo.InvariantCulture, "{0}{1}, {2}", viewName, suffix, viewAssemblyName);
        return Type.GetType(viewModelName);
    });
    ViewModelLocationProvider.SetDefaultViewModelFactory(type => Container.Resolve(type));
}

Этот бит кода используется для добавления вкладки при навигации

<metro:MetroTabControl prism:RegionManager.RegionName="{x:Static constants:RegionNames.ContentRegion}" >
    <metro:MetroTabControl.ContentTemplate>
        <DataTemplate>
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                <Rectangle Margin="2,3,2,3" 
               HorizontalAlignment="Stretch" 
               Fill="{DynamicResource AccentColorBrush}" 
               Height="2"/>
                <ContentControl Grid.Row="1" Content="{Binding Content}" />
            </Grid>
        </DataTemplate>
    </metro:MetroTabControl.ContentTemplate>
</metro:MetroTabControl>

Навигация с помощью RegionManager.RequestNavigate(Region, navigatePath) А вот как выглядит модель моего вида

public class MinerViewModel : Screen
{

    string searchText = "Seacrch";
    public ICommand SearchCommand { get; private set; }

    IList<FeedItem> temp;

    public MinerViewModel()
    {

        this.SearchCommand = new DelegateCommand(this.ToggleSearch, () => { return true; });
        //ToggleSearch();
    }


    public string SearchText
    {
        get => searchText;
        set
        {
            SetProperty<string>(ref searchText, value);
        }
    }

    public void ToggleSearch()
    {
        // do foo and bar
    }


}

Пожалуйста, как мне заставить вещи работать так, как ожидалось?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...