【问题标题】:How to Pass a value from One User Control to another in WPF.如何在 WPF 中将值从一个用户控件传递到另一个用户控件。
【发布时间】:2014-07-18 18:11:42
【问题描述】:

我正在将我的项目的 GUI 开发为 WPF 中的 UserControl。我正在尝试在另一个 WPF 窗口中使用它。它工作正常,但真正的问题是将特定值从一个用户控件传递到另一个用户控件。

eg: 
UserControl1 is displayed within WPFWindow1 
UserControl2 is displayed within WPFWindow2 

MainWindow opens Window1 , Window1 opens Window 2 . 

所以要求是在 Window2 中,当用户单击按钮时,它应该将值传递给 Window1 。

这是我为了更好地理解而做的一个示例项目(以防万一):http://goo.gl/h0zpL7

【问题讨论】:

  • 正确的方法是将数据绑定到“模型”类。 UserControls 不应相互了解或相互要求。您的目标可能应该是学习 MVVM,但您可以仅使用数据绑定的基本元素来解决当前的问题。
  • "当用户单击按钮时,它应该将一个值传递给 Window1",这意味着您应该使用传递的值再次显示 Window1
  • 是的。它应该显示在文本框或标签中(在任何控件中)

标签: c# .net wpf user-controls window


【解决方案1】:

DelegatesEvents 是我可以建议的最佳做法。在 Window2 中创建 DelegateEvent,如下所示

public partial class Window2 : Window
{
    public delegate void MyDelegate(object value);
    public event MyDelegate MyCustomEvent;

    public Window2()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        MyCustomEvent(100);
    }
}

在 Window1 中订阅MyCustomEvent,如下所示

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Window2 wnd = new Window2();
        wnd.MyCustomEvent += wnd_MyCustomEvent;
        wnd.Show();
    }

    void wnd_MyCustomEvent(object value)
    {
        MessageBox.Show(value.ToString());
    }
}

【讨论】:

  • 但我不使用 Windows 中的任何按钮。所有的实现都在用户控件中完成,并在窗口中拖放。 (如果我错了,请纠正我)你检查过 SAMPLE 文件吗?
  • 您也可以在 UserControl 中执行相同的操作,而不是 window。代表将同样工作。在这里,您所要做的就是在用户控制按钮中实现委托
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
相关资源
最近更新 更多