当我点击PAGE2上的按钮时,我想更改PAGE1中控件的Visible属性。 PAGE2是一个Pop' Up窗口,其中包含用户的消息。我希望当他点击下面的按钮时,可以从PAGE2中的控件中看到属性(同时仍然在后台显示)。
我的问题是我的按钮事件属于PAGE2类,我无法从那里到达PAGE1的对象。
答案 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 。