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