Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 导航mvvm灯_C#_Wpf_Mvvm - Fatal编程技术网

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();