我正在开发WPF应用程序,并在其中将Prism与Unity IOC结合使用。对于在应用程序启动时显示的所有其他视图,它们似乎已适当绑定到预期的VM(由自动棱镜连接)。但是,当我导航到另一个视图(在选项卡控件中,现在只是一个视图)时,似乎无法将按钮绑定到Commands或将TextBlock绑定到VM的字符串属性。请注意,这在主视图及其区域内的视图中都可以正常工作。
除了告诉棱镜自动连接虚拟机之外,我还尝试从视图中以XAML分配DataContext,从后面的代码中分配DataContext。我什至在引导程序中添加了下面的第一个代码,以确定prism解析为的视图模型,并且在调试时它似乎是预期的VM。在上述所有情况下,还向我的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
}
}
请问我如何使事情按预期进行?