Я разрабатываю приложение 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
}
}
Пожалуйста, как мне заставить вещи работать так, как ожидалось?