我有两个简单的Model类和一个ViewModel ...
public class GridItem
{
public string Name { get; set; }
public int CompanyID { get; set; }
}
public class CompanyItem
{
public int ID { get; set; }
public string Name { get; set; }
}
public class ViewModel
{
public ViewModel()
{
GridItems = new ObservableCollection<GridItem>() {
new GridItem() { Name = "Jim", CompanyID = 1 } };
CompanyItems = new ObservableCollection<CompanyItem>() {
new CompanyItem() { ID = 1, Name = "Company 1" },
new …
Run Code Online (Sandbox Code Playgroud) 我有一个用于ItemsControl的数据模板的自定义控件.我想在每个项目上放置一个ContextMenu,让它调用UserControl的View Model来处理命令.使用下面的XAML,我可以在自定义控件上获取单击事件,以在用户控件视图模型中调用SelectedItemCommand.但是,使用上下文菜单的类似语法失败.默认情况下,我会为每个自定义控件获取视图模式.我使用的任何RelativeSource语法值都没有解析为用户控件的视图模型(RelativeSource Self).
什么是神奇的代码?
<ItemsControl.ItemTemplate>
<DataTemplate>
<controls:MyCustomItem Width="Auto"
Command="{Binding DataContext.SelectedItemCommand,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ItemsControl}}}"
CommandParameter="{Binding}">
<controls:MyCustomItem.ContextMenu>
<ContextMenu>
<MenuItem Command="{Binding DataContext.ClearAlarmsCommand,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ItemsControl}}}"
Header="Clear All" />
</ContextMenu>
</controls:MyCustomItem.ContextMenu>
</controls:MyCustomItem>
</DataTemplate>
</ItemsControl.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)