如何从一个页面更改另一个页面中的属性

本文关键字:属性 另一个 一个 | 更新日期: 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