在主窗口中从另一页面更改页面wpf mvvm c#

时间:2017-05-31 17:39:23

标签: c# wpf xaml mvvm

我正在为wpf使用mvvmlight框架。 我有我的框架的主窗口(firstLoadedPage只是一个例子):

        <Frame Source="firstLoadedPage" />

当我点击

中的按钮时,我想将我的页面更改为另一个页面
  

首次加载页面

但我不知道如何实现它。 我已经尝试过像这样的绑定属性框架源:

public static string _myFrameSourcePath = firstLoadedPage
public string MyFrameSourcePath
{
    get { return _myFrameSourcePath; }
    set {
       _myFrameSourcePath = value;
       RaisePropertyChanged("MyFrameSourcePath");
    }
}

然后在firstLoadedPage中单击按钮时更改_myFrameSourcePath的值。它不起作用所以我尝试将MyFrameSourcePath更改为static,然后更改MyFrameSourcePath的值而不是Page中的_myFrameSourcePath。它也不起作用。

当我点击此页面内的按钮将当前页面更改为另一个页面时,有人可以告诉我如何更改MainWindow中框架源中放置的页面?

1 个答案:

答案 0 :(得分:1)

你可以这样做。以下是Xaml示例

<Grid>
    <StackPanel Orientation="Vertical">
        <TextBlock>Outside area of frame</TextBlock>
        <Frame Name="FrameWithinGrid"  Source="{Binding FrameSource}">
        </Frame>
        <Button x:Name="button1" Height="23" Margin="114,12,25,0" Command="{Binding GoToCommand}"   
            VerticalAlignment="Top" >Navigate to Msdn
        </Button>
    </StackPanel>


</Grid>

在您的ViewModel中,有一些示例代码,例如:

      private Uri _frameSource = new Uri("http://www.google.com", UriKind.Absolute);
      public Uri FrameSource
      {
         get { return _frameSource;}

         set
         {
            _frameSource = value;
            OnPropertyChanged("FrameSource");
         }
      }

      public ICommand GoToCommand
      {
         get
         {
            return new DelegateCommand(ExecuteGoTo);
         }
      }

      private void ExecuteGoTo()
      {
         FrameSource = new Uri("http://www.msdn.com", UriKind.Absolute);
      }

多数民众赞成。确保您的视图模型实现了INotifyPropertyChanged。如果您使用的是MVVM Light,请将DelegateCommand更改为RelayCommand