我阅读了WPF4释放书中的事件部分,但我找不到我想要的内容。
例如我有两个窗口(两者都已打开)。
我的第一个按钮,第二个文本框(数字作为内容)。
每当我点击按钮时,我希望文本框的数字增加而不再打开第二个窗口。期待您的帮助和建议!
我已经从主窗口打开了2个窗口,我在第一个窗口的click_event按钮上尝试了这个代码:
private void b_Click(object sender, RoutedEventArgs e)
{
int i = int.Parse(WpfApplication22.Window2.textbox.Text);
i++;
WpfApplication22.Window1.textbox.Text = i.ToString();
}
答案 0 :(得分:2)
我建议您使用自己的自定义事件处理程序来执行此类操作。对于你的问题需要什么可能有点过分,但它有更多的用途和更多的可扩展性。此外,WPF应该使用MVVM模式实现,这意味着您只需要让ViewModels相互通信。出于此示例的目的,我将假设每个窗口都有一个关联的ViewModel。
首先创建自己的事件参数,如下所示。
public class MyCustomEventArgs : EventArgs {
}
然后编写自己的事件处理程序类,如下所示。
public class CustomEventHander {
static public event EventHandler CustomEvent;
static public void RaiseMyCustomEvent(object sender, EventArgs args) {
if (CustomEvent != null) CustomEvent(sender,args);
}
}
然后你只需要连线。
在第一个Windows ViewModel上,您需要将事件处理程序放在构造函数中。
CustomEventHandler.CustomEvent += handleCustomEvent;
其次,您通过编写handleCustomEvent方法来编写句柄事件。这是您增加所需数量的地方。
private void handleCustomEvent(object sender, EventArgs e) {
if (e is MyCustomEventArgs) {
this.IntValue += 1;
}
}
到目前为止,我们可以处理事件,提升事件但我们需要触发事件。
在第二个窗口控制器中,将ICommand连接到按钮,并将以下代码放入方法中。
CustomEventHandler.RaiseMyCustomEvent(this, new MyCustomEventArgs());
我希望这能回答你的问题。当然,我已经假设使用MVVM并将属性IntValue绑定到第一个窗口上的文本框。但是这段代码应该有希望满足你的需求。
答案 1 :(得分:1)
您可以将第二个DataContext
上的Window
分配给第一个Window
并使用DependancyProperty
绑定您想要的值
Window1代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public int Count
{
get { return (int)GetValue(CountProperty); }
set { SetValue(CountProperty, value); }
}
public static readonly DependencyProperty CountProperty =
DependencyProperty.Register("Count", typeof(int), typeof(MainWindow), new UIPropertyMetadata(0));
private void Button_Click(object sender, RoutedEventArgs e)
{
//SetBinding windows DataContext to this window
new PopupWindow { DataContext = this }.Show();
}
}
Window1 Xaml:
<Window x:Class="WpfApplication10.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="325" Width="422" Name="UI">
<Grid DataContext="{Binding ElementName=UI}">
<StackPanel>
<TextBox Text="{Binding Count, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
<Button Content="Open Window 2" Click="Button_Click" />
</StackPanel>
</Grid>
</Window>
Window2代码:
public partial class PopupWindow : Window
{
public PopupWindow()
{
InitializeComponent();
}
}
Window2 Xaml:
<Window x:Class="WpfApplication10.PopupWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication10"
Title="PopupWindow" Height="300" Width="300">
<Grid>
<TextBlock Text="{Binding Path=Count}" />
</Grid>
</Window>
<强>结果:强>
答案 2 :(得分:0)
你的第一个窗口需要引用第二个窗口。
abc = New Window2
abc.Show()
然后,当按钮的点击事件触发时,您可以执行此操作。
abc.TextBox1.Text = CStr(CInt(abc.TextBox1.Text) + 1)