【WPF】WPF中UserControl如何访问它所属的Window的控件或事件

问题提出:
现在做了个UserControl,能实现保存数据的功能,但是保存完了,需要更新MainWindow的数列表数据

问题解决:
经过我的研究,发下用WPF的事件能够很好的解决这个问题。原理是让Window主窗口监听所有的Button事件(包括它所有的UserControl),根据需要来执行相应的操作。

1、在Window的构造函数中添加按钮监听事件

public static string comType;

public MainWindow()
    {
        InitializeComponent();
        this.AddHandler(Button.ClickEvent, new RoutedEventHandler(ButtonClicked));
    }

2、在Window中实现这个事件

#region 其他组件事件监听
/// <summary>
/// 其他组件事件监听
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonClicked(object sender, RoutedEventArgs e)
{
    switch (comType)
    {
        case "Save":
            // 处理自己的逻辑
            break;
        default:
            break;
    }
    comType = string.Empty; // 处理完了置空这个
}
#endregion

这里我定义了一个字符串类型comType来设置需要监听的事件类型,如果不需要监听,则可以在按钮事件里,将事件类型设置为""。这样当MainWindow监听到事件后,也会忽略掉。在Window执行完操作后,也会将事件类型设置为"",否则只要有按钮事件就会继续执行。

3、在UserControl中需要被传递的事件中里设置事件类型和相关的参数

private void Save_Click(object sender, RoutedEventArgs e)
{
     WindowSave windowSave = new WindowSave();
     if (windowSave.ShowDialog() == true)
     {
         string pid = windowSave.txt_ParentId.Text;
         string proId = StringUtils.obj2Str(projId);
         string url = textBoxUrl.Text;
         string name = windowSave.txt_ModuleName.Text;
         string method = StringUtils.obj2Str(this.comboBoxMethod.SelectedValue);
         TextRange textRange = new TextRange(richTextParam.Document.ContentStart, richTextParam.Document.ContentEnd);
         string body = textRange.Text;
         Functions.createModule(pid, proId, url, name, body, method);
         MainWindow.comType = "Save";
     }
 }

OK,成功了,当在UserControl里点击了Save_Click按钮时候,首先将参数传递给MainWindow,然后设置类型。MainWindow在监听到事件后通过switch来执行响应的操作,然后在将类型设置为""。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时光不等仁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值