如何从一个页面更改另一个页面中的属性
本文关键字:属性 另一个 一个 | 更新日期: 2023-09-27 18:17:35
当我点击PAGE2上的按钮时,我想更改PAGE1中控件的属性Visible。PAGE2是一个弹出窗口,为用户提供消息。我想当他点击下面的按钮,属性可见从一个控件在PAGE2(仍然显示在后台在同一时间)改变。
我的问题是,我的按钮的事件属于PAGE2类,我不能到达PAGE1的对象从那里。
如果你想以"正确"的方式完成它,你应该与中间对象共享一些数据。
下面是一个完整的示例:
视图模型,由两个页面/windows共享:
using System.ComponentModel;
namespace WpfMagic
{
public class MyViewModel : INotifyPropertyChanged
{
private bool flag;
public bool Flag
{
get { return flag; }
set
{
if (value != flag)
{
flag = value;
PropertyChanged(this, new PropertyChangedEventArgs("Flag"));
}
}
}
public event PropertyChangedEventHandler PropertyChanged = delegate { };
}
}
主界面/窗口:
XAML:<Window x:Class="WpfMagic.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfMagic"
Title="MainWindow"
SizeToContent="WidthAndHeight">
<StackPanel>
<StackPanel.Resources>
<BooleanToVisibilityConverter x:Key="boolToVisibility"></BooleanToVisibilityConverter>
</StackPanel.Resources>
<TextBlock Visibility="{Binding Model.Flag,Converter={StaticResource boolToVisibility}}">Hey I'm Here!</TextBlock>
<Button Click="Button_Click">Show Popup!</Button>
</StackPanel>
</Window>
后台代码:
using System.Windows;
namespace WpfMagic
{
public partial class MainWindow : Window
{
public MyViewModel Model { get; set; }
public MainWindow()
{
InitializeComponent();
Model = new MyViewModel();
this.DataContext = this;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
new AnotherWindow(Model).Show();
}
}
}
弹出页面/窗口:
XAML:<Window x:Class="WpfMagic.AnotherWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="AnotherWindow" Height="300" Width="300">
<Grid>
<CheckBox IsChecked="{Binding Model.Flag}">Check Me!</CheckBox>
</Grid>
</Window>
后台代码:
using System.Windows;
namespace WpfMagic
{
public partial class AnotherWindow : Window
{
public MyViewModel Model { get; set; }
public AnotherWindow(MyViewModel model)
{
InitializeComponent();
Model = model;
this.DataContext = this;
}
}
}
如果你得到这个例子,你将得到90%的MVVM。