我有一个 TreeView 我正在填充并向每个项目添加一个 ContextMenu。问题是在我的 ViewModel 中,TreeView ItemSource 绑定到 ViewModel 本身的一个属性。当我尝试再次引用 ViewModel 上的某些属性时,我似乎无法让它工作。
<TreeView Grid.ColumnSpan="1" Grid.Row="1" HorizontalAlignment="Stretch" ItemsSource="{Binding ModelItems}" SelectedTreeItem="{Binding SelectedItem, Mode=TwoWay}" VerticalAlignment="Stretch" Grid.RowSpan="3" Margin="5">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Models}">
<TextBlock Text="{Binding Header, Mode=TwoWay}" ToolTip="{Binding Tooltip, Mode=TwoWay}">
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Header="Server" Visibility="{Binding Path=IsServerVisible}">
<MenuItem Header="Add" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Windows:MainWindow}}, Path=ViewModel:ViewModel.AddServerCommand}"/>
<MenuItem Header="Edit" />
<MenuItem Header="Delete" />
</MenuItem>
<MenuItem Header="Config" Visibility="{Binding Path=IsConfigVisible}">
<MenuItem Header="Fetch" />
<MenuItem Header="Edit" />
<MenuItem Header="Save" />
</MenuItem>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
StackOverflow 上的前一篇文章指出了使用 RelativeSource 正确绑定到 MainWindow 上的 ViewModel 的方向。但是,当我运行该应用程序时,该命令不起作用,并且“输出”窗口没有生成任何我可以看到的绑定或 xaml 错误。
基本上可见性绑定有效,因为这些属性存在于“模型”项目上。但是,我希望将所有内容都移至 ViewModel,尤其是 Command。
谁能发现我在这里做错了什么?