我有一個TreeView我正在填充並添加一個ContextMenu到每個項目。問題出在我的ViewModel中,TreeView的ItemSource綁定到ViewModel本身的一個屬性上。當我試圖再次引用ViewModel上的某些屬性時,我似乎無法使其工作。WPF中的父對象DataBinding
<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>
一前一後在計算器上指出我在使用的RelativeSource正確綁定到我的主窗口視圖模型的方向。但是,當我運行該應用程序時,該命令不起作用,並且輸出窗口不會生成任何可以看到的綁定或xaml錯誤。
基本上可見性綁定工作,因爲這些屬性存在於「模型」項目。不過,我希望一切都被移到ViewModel,特別是命令。
任何人都可以發現我在這裏做錯了嗎?
其實我能夠得到錯誤消息輸出: System.Windows.Data錯誤:4:無法找到綁定的源參考'RelativeSource FindAncestor,AncestorType ='Windows.MainWindow',AncestorLevel ='1'' 。 BindingExpression:路徑=視圖模型:ViewModel.AddServerCommand;的DataItem = NULL;目標元素是'MenuItem'(Name ='');目標屬性是'命令'(類型'ICommand') – Tada