C# 如何使用WPF和C创建包含两个子页面的“保存/重置选项”页面
我想制作一个包含两个子页面选项的页面。 我遇到的问题是无法从主页的子页访问对象。我应该注意,我只使用DataContext来编写后面的脚本。 下面是一些代码,可以帮助您更好地理解我的意思: StartPage.xaml Page1.xaml page2与之类似,唯一的区别是元素的命名约定C# 如何使用WPF和C创建包含两个子页面的“保存/重置选项”页面,c#,wpf,mvvm,datacontext,C#,Wpf,Mvvm,Datacontext,我想制作一个包含两个子页面选项的页面。 我遇到的问题是无法从主页的子页访问对象。我应该注意,我只使用DataContext来编写后面的脚本。 下面是一些代码,可以帮助您更好地理解我的意思: StartPage.xaml Page1.xaml page2与之类似,唯一的区别是元素的命名约定 不确定是否有子页面的视图模型, 如果确实有,访问复选框中这些viewmodel属性的一种方法如下所示 var tt = (((_Page as StartPage).frame.NavigationServic
不确定是否有子页面的视图模型, 如果确实有,访问复选框中这些viewmodel属性的一种方法如下所示
var tt = (((_Page as StartPage).frame.NavigationService.Content as Page1).DataContext as Page1ViewModel).IsCBChecked;
我不知道这个叫做IsCBChecked的对象是什么,但它确实帮助我理解了它是如何工作的。但这并不是仅从导航到的当前页面收集第2页的数据。
using System.Windows.Controls;
namespace WpfApp
{
/// <summary>
/// Interaction logic for StartPage.xaml
/// </summary>
public partial class StartPage : Page
{
public StartPage()
{
InitializeComponent();
DataContext = new StartPage_DataContext(this);
}
}
}
using System.Windows.Controls;
using System.Windows.Input;
namespace WpfApp
{
public class StartPage_DataContext
{
private Page _Page;
public StartPage_DataContext(Page page)
{
_Page = page;
FirstPageCommand = new RelayCommand(() => FirstPage());
SecondPageCommand = new RelayCommand(() => SecondPage());
SaveCommand = new RelayCommand(() => Save());
ResetCommand = new RelayCommand(() => Reset());
}
private void FirstPage()
{
(_Page as StartPage).frame.NavigationService.Navigate(new Page1());
}
private void SecondPage()
{
(_Page as StartPage).frame.NavigationService.Navigate(new Page2());
}
private void Save()
{
//Here is where I need code for saving both "Page1" and "Page2" elements to Settings class.
//Exeple : Settings._firstCB = Page1.firstCB.IsCheked.Value;
// Settings._secondCB = Page2.firstCB.IsCheked.Value;
}
private void Reset()
{
//Here is where I need code for setting both "Page1" and "Page2" elements to some default values.
//Exemple : Page1.firstCB.IsCheked.Value = false;
// Page2.firstCB.IsCheked.Value = true;
}
public ICommand FirstPageCommand { get; private set; }
public ICommand SecondPageCommand { get; private set; }
public ICommand SaveCommand { get; private set; }
public ICommand ResetCommand { get; private set; }
}
}
<Page x:Class="WpfApp.Page1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfApp"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
Title="Page1">
<Grid Background="White">
<StackPanel>
<CheckBox x:Name="firstCB" Content="First Combo Box"/>
<CheckBox x:Name="secondCB" Content="Second Combo Box"/>
<ComboBox x:Name="firstCombo">
<ComboBoxItem Content="First Item"/>
<ComboBoxItem Content="Second Item"/>
</ComboBox>
</StackPanel>
</Grid>
var tt = (((_Page as StartPage).frame.NavigationService.Content as Page1).DataContext as Page1ViewModel).IsCBChecked;