在Frame WPF MVVM内的第1页中的事件导航到第2页

时间:2017-02-06 16:58:22

标签: c# wpf mvvm

我有一个名为CreateLot.xaml的窗口,其中包含如下框架:

 <Frame Name="AddLotFrame" Content="{Binding Path=CurrentPage,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Background="Transparent"
               ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Visible"
               MinHeight="175" MinWidth="175" ></Frame>

在视图模型中CreateLotVm.cs

 public CreateLotVm()
        {
            AddLotPage addLot = new AddLotPage();
            AddLotPageVm vm = new AddLotPageVm(CurrentPage);
            addLot.DataContext = vm;
            CurrentPage = addLot; 
        }

我绑定AddLotPageCurrentPage的框架。

AddLotPage内,我有一个表单和一个按钮。在按钮按下事件我正在做一些验证和数据库事务。现在根据按钮按下事件AddLotPage中输入的数据,应显示第2页,第3页或第4页。换句话说,AddLotFrame应该根据在AddLotPage(页1)中输入的数据导航到第2页,第3页或第4页。 所以我想从子CurrentPage页面更新父AddLotFrame的{​​{1}}属性。 我该如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

您可以通过引用AddLotPage来注入AddLotPageVmCreateLotVm(取决于您要导航的位置):

<强> AddLotPageVm.cs:

private readonly CreateLotVm _navigationVm;
public RelayCommand ButtonCommand;
public AddLotPageVm(CreateLotVm navigationVm)
{
    _navigationVm = navigationVm;
    ButtonCommand = new RelayCommand(ButtonMethod);
}

public void ButtonMethod(object x)
{
    //...

    _navigationVm.CurrentPage = new Page2();
}

<强> CreateLotVm.cs:

AddLotPage addLot = new AddLotPage(); 
AddLotPageVm vm = new AddLotPageVm(this);//<-- injection
addLot.DataContext = vm;
currentPage = addLot;