编程语言
首页 > 编程语言> > c#-在代码中创建控件时如何将Click事件绑定到ViewModel

c#-在代码中创建控件时如何将Click事件绑定到ViewModel

作者:互联网

通常,我在XAML中创建视图,然后使用Caliburn.Micro将事件绑定到视图模型.

<Button cal:Message.Attach="[MouseLeftButtonUp]=[ModifyList($source)]" />

但是,我现在需要基于配置数据在代码中创建按钮.

该代码不在后面的代码中,而是在工厂类中.

Button button = new Button() { Content = "Click Me" };

那么问题是如何安排活动的进行?

解决方法:

我以前从未做过此事,因此这可能不是最好的方法,但它确实起作用了.

我在下面编写了一个扩展方法,该方法应该使将ActionMessage附加到任何控件的任何事件变得非常简单.

public static class UIElementExtension {
    public static void AttachActionMessage(this DependancyObject control, string eventName, string methodName, object parameter) {
        var action = new ActionMessage();
        action.MethodName = methodName;
        action.Parameters.Add(new Parameter { Value = parameter });

        var trigger = new System.Windows.Interactivity.EventTrigger();
        trigger.EventName = eventName;
        trigger.SourceObject = control;
        trigger.Actions.Add(action);

        Interaction.GetTriggers(control).Add(trigger);
    }
}

要使用它,只需创建您的控件并调用AttachActionMessage():

var button = new Button { Content = "Click Me" };
button.AttachActionMessage("Click", "ModifyList", DataContext);

标签:c,caliburn-micro
来源: https://codeday.me/bug/20191122/2063047.html