Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “附加”以单击,即使该项目是使用concention创建的_C#_Wpf_Caliburn.micro - Fatal编程技术网

C# “附加”以单击,即使该项目是使用concention创建的

C# “附加”以单击,即使该项目是使用concention创建的,c#,wpf,caliburn.micro,C#,Wpf,Caliburn.micro,我想将视图模型的集合转换为菜单项列表,然后在用户单击菜单项时收到通知。我已经为菜单项创建了一个视图模型并绑定了集合,如下所示。不幸的是,我很难找到一种方法,如何将方法附加到所创建菜单项的单击事件 <Menu> <MenuItem ItemsSource="{Binding SampleMenuItems}"/> </Menu> public class MenuItemModel { public override string ToStr

我想将视图模型的集合转换为菜单项列表,然后在用户单击菜单项时收到通知。我已经为菜单项创建了一个视图模型并绑定了集合,如下所示。不幸的是,我很难找到一种方法,如何将方法附加到所创建菜单项的单击事件

<Menu>
    <MenuItem ItemsSource="{Binding SampleMenuItems}"/>
</Menu>


public class MenuItemModel
{
    public override string ToString()
    {
        return "Sample item";
    }

    public void Click()
    {
        // Do something here
    }
}

公共类菜单模型
{
公共重写字符串ToString()
{
返回“样品”;
}
公共作废点击()
{
//在这里做点什么
}
}
当用户单击Caliburn.Micro为该模型实例创建的菜单项时,我应该更改什么以调用Click()方法?
/方法名不是固定的,因此可以重命名/

使用
ICommand
s而不是
单击
处理程序。。。为此,您可以使用:

public class MenuItemModel
{
    public override string ToString()
    {
        return "Sample item";
    }

    public void ICommand Click { get; set; }
}
以这种方式使用
ICommand
s时,最好使用实现。然后,您可以像这样将它们连接起来:

<Style TargetType="MenuItem">
    <Setter Property="Command" Value="{Binding DataContext.Click, RelativeSource={
        RelativeSource AncestorType=MenuItem}}" />
</Style>


什么是“关注”?点击事件需要由用户界面来处理,而不是由业务域模型来处理。与此同时,我找到了另一种可能的解决方案。