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

标签 c# wpf properties

当我单击 PAGE2 上的按钮时,我想更改 PAGE1 中控件的可见属性。 PAGE2 是一个带有给用户的消息的弹出窗口。我希望当他单击下方的按钮时,从 PAGE2 中的控件可见的属性(同时仍显示在背景中)发生变化。

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

最佳答案

如果您想以“正确”的方式进行操作,您应该与中间对象共享一些数据。

这是一个完整的示例:

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

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

关于c# - WPF 如何更改页面中的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25268972/

相关文章:

wpf - WPF WebBrowser控件中的持久cookie?

wpf - 多个绑定(bind) ViewModel 到 View MVVM

java - 列出属性并转换为 String[]

c# - SqlException - 从服务器接收结果时发生传输级错误

c# - 尝试创建新事件时出现身份验证范围不足错误

c# - 如何使读取此实例原始线程安全而无需锁定?

c# - 如何将图像放置在其中心而不是左上角?

c# - Mvc 在 View 中使用 2 @model

iphone - 需要一些关于属性(property)的解释

c# - 从基类更改属性 setter 行为