wpf - 如何通过仅单击用户控件中的一个按钮来更新框架的 Source 属性?

标签 wpf binding frame

我想了解如何通过根据点击次数仅单击一个“下一步”按钮来更新源属性,并能够在每次单击该按钮时将不同的页面加载到框架中。任何建议都将受到高度赞赏!预先感谢您。

主窗口代码:

<Grid x:Name="LayoutRoot">
    <Frame Content="Frame" Source="/WpfApplication1;component/Page1.xaml"/>
    <local:NavUserControl HorizontalAlignment="Center" VerticalAlignment="Bottom"/>
</Grid>

包含按钮的用户控件:

<StackPanel x:Name="LayoutRoot" Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0,0,0,20">
    <Button Content="Back" HorizontalAlignment="Left" Width="75"/>
    <Button Content="Next" HorizontalAlignment="Left" Width="75" />
</StackPanel>

最佳答案

创建一个实现 NextPageCommandPreviousPageCommand 命令的 PageViewModel 类,这些命令分别引发 UserNavigedToNextPageUserNavigedToPreviousPage 事件。为了简单起见,还让它们公开 PageViewModel 类型的 NextPagePreviousPage 属性。为每个页面创建 PageViewModel 的子类。

为拥有的 UserControl 创建一个 View 模型类,该类公开 PageViewModel 类型的 CurrentPage 属性。创建所有 PageViewModel 对象,并在每个对象上设置 NextPagePreviousPage。在这些对象上添加导航事件的处理程序,如下所示:

public void Page_UserNavigatedToNextPage(object sender, EventArgs e)
{
   if (sender == CurrentPage && CurrentPage.NextPage != null)
   {
      CurrentPage = CurrentPage.NextPage;
   }
}

假设您已经实现了属性更改通知,现在每当当前页面的 NextPageCommandPreviousPageCommand 执行时,CurrentPage 属性都会已更新并将反射(reflect)在 UI 中。如果您已经为每种页面 View 模型类型创建了数据模板,那么您所需要的只是

<ContentPresenter Content="{Binding CurrentPage}"/>

在您的用户控件中,您就可以开始了。

如果“下一个”/“上一个”按钮在您的控件中,而不是在页面中,则在主视图模型中实现公开 CurrentPage.NextPageCommandCurrentPage.PreviousPageCommand 的属性>,并将按钮绑定(bind)到它们。

关于wpf - 如何通过仅单击用户控件中的一个按钮来更新框架的 Source 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6113492/

相关文章:

wpf - 没有任何焦点的键绑定(bind)

c# - 如何以编程方式将属性为 "Template"的 Setter 添加到 C#/WPF 中的触发器?

plugins - 如何在 Maven2 构建中执行有序任务

c# - 在 WPF 控件中将事件处理程序声明为静态或非静态

c# - 将文本从字体添加到视频帧

c# - 如何使用 MVVM 从 DataGrid 传递有关所选项目的信息

c# - 如何在 C# 或 SQL Server 中找到邮政编码之间的距离?

python - 从 boost python 返回一个 C++ 数组(指针)

Java 使用 Graphics 创建动态但简单的图形

tcp - WebSocket 框架中的掩码是什么?