动态加载 XAML 时附加到 XAML 控件中的单击事件。

Attach to a click event in XAML control when loading XAML dynamically.

我有一个 XAML 控件,它在运行时动态加载。这是纯粹的 XAML,没有隐藏代码。

我无法控制父加载机制,这就是为什么这看起来有点奇怪。

我有一个父应用程序加载我的插件 DLL 并加载我的 XAML 控件。

我的 DLL 签名是:

public class Application : BaseClassHere
{
    public Application(IParentContext context) : base(context)
    {
        // Im placing this instance in the bag which i use in my XAML
        base.MyObservablePropertyBag["MyParentContext"] = new ObservableValue<object>(this);
    }
}

我的XAML是这样的:

<av:UserControl 
    xmlns:local="clr-namespace:MyApplicationNS;assembly=MyDll"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" >

    <Border DataContext="{Binding MyObservablePropertyBag[MyParentContext].Value}" >

        <Button Name="MyButton" />

    </Border>
</UserControl>

此绑定在 XAML 中完美运行。我可以完全访问我在应用程序 class 中定义的所有 public 属性。

我的问题是我想 link 在我的按钮上添加点击事件。如果我在 XAML 中添加一个 Click 事件,它会在运行时出错,告诉我我需要编译我的 XAML。

有什么方法可以在应用程序中订阅 MyButton 的 Click 事件 class?

好吧,如果您说绑定有效,那为什么还要尝试扰乱 Click 事件?而是使用 Button 的命令 属性。创建一个 ICommand 实例(如 DelegateCommandRelayCommand),将其放入 属性 包中并绑定到它!