gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:04:25 27 4
gpt4 key购买 nike

当我单击 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com