C# 导航mvvm灯
有人能告诉我为什么我不能再次更改页面 例如,当我单击“登录”时,应用程序可以更改页面,即显示主面板,但是如果用户单击另一个按钮打开另一个面板,则不会发生任何事情 主窗口C# 导航mvvm灯,c#,wpf,mvvm,C#,Wpf,Mvvm,有人能告诉我为什么我不能再次更改页面 例如,当我单击“登录”时,应用程序可以更改页面,即显示主面板,但是如果用户单击另一个按钮打开另一个面板,则不会发生任何事情 主窗口 <Window x:Class="Smart.Interface.View.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.micros
<Window x:Class="Smart.Interface.View.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:view="clr-namespace:Smart.Interface.View"
xmlns:ViewModel="clr-namespace:Smart.Interface.ViewModel"
Title="MainWindow" Height="768" Width="1024"
DataContext="{Binding Login,
Source={StaticResource Locator}}"
ResizeMode="NoResize">
<Grid Background="#FFE6E7E8">
<Rectangle Panel.ZIndex="0" Name="RetanguloTop" Fill="Black" HorizontalAlignment="Left" Height="35" Stroke="Black" VerticalAlignment="Top" Width="1024"/>
<Rectangle Name="RetanguloFooter" Fill="Black" HorizontalAlignment="Left" Height="35" Margin="0,703,0,0" Stroke="Black" VerticalAlignment="Top" Width="1024"/>
<ContentControl Content="{Binding CurrentViewModel}" />
</Grid>
</Window>
我的app.xaml
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
<DataTemplate DataType="{x:Type vm:LoginViewModel}">
<views:LoginView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:PainelDeOpcoesViewModel}">
<views:PainelDeOpcoesView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:GerenciarUsuariosViewModel}">
<views:GerenciarUsuariosView />
</DataTemplate>
缺少一些位,但猜测CurrentViewModel需要发出PropertyChanged通知(实现INotifyPropertyChanged):
如果无法解决此问题,请提供属性的代码。您可以通过创建一个数据模板来获得所需的结果,其中Viewmodel作为键,而View作为其各自的值。 只需将上述数据模板添加到xaml中
<Window.Resources>
<DataTemplate DataType="{x:Type DataTemplates:PainelDeOpcoesViewModel}">
<DataTemplates:PainelDeOpcoesView></DataTemplates:PainelDeOpcoesView>
</DataTemplate>
<DataTemplate DataType="{x:Type DataTemplates:GerenciarUsuariosViewModel}">
<DataTemplates:GerenciarUsuariosView></DataTemplates:GerenciarUsuariosView>
</DataTemplate>
还有这个定位器。您绑定到的登录名,也是分配CurrentViewModel的位置吗?就是这样!正如我前面所说的,第一个操作是有效的,但是当主屏幕被加载时,我不再使用并享受相同的操作逻辑来加载另一个页面。添加以下内容:“{Binding CurrentViewModel,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,NotifyOnSourceUpdate=True}”…感谢您的帮助,但它没有起作用!
public object CurrentViewModel {
get { return _currentViewModel; }
set {
_currentViewModel = value;
OnPropertyChanged("CurrentViewModel"); //Ensure you have this or are binding to a DependencyProperty
}
}
<Window.Resources>
<DataTemplate DataType="{x:Type DataTemplates:PainelDeOpcoesViewModel}">
<DataTemplates:PainelDeOpcoesView></DataTemplates:PainelDeOpcoesView>
</DataTemplate>
<DataTemplate DataType="{x:Type DataTemplates:GerenciarUsuariosViewModel}">
<DataTemplates:GerenciarUsuariosView></DataTemplates:GerenciarUsuariosView>
</DataTemplate>
CurrentViewModel = new PainelDeOpcoesViewModel();
OR
CurrentViewModel = new GerenciarUsuariosViewModel();