WPF如何更改页面中的属性?

时间:2014-08-12 16:01:27

标签: c# wpf properties

当我点击PAGE2上的按钮时,我想更改PAGE1中控件的Visible属性。 PAGE2是一个Pop' Up窗口,其中包含用户的消息。我希望当他点击下面的按钮时,可以从PAGE2中的控件中看到属性(同时仍然在后台显示)。

我的问题是我的按钮事件属于PAGE2类,我无法从那里到达PAGE1的对象。

1 个答案:

答案 0 :(得分:2)

我想以“正确”的方式做到这一点,你应该与中间对象共享一些数据。

以下是完整的示例:

视图模型,由两个页面/窗口共享:

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