Mar*_*hal 1 c# data-binding wpf xaml mvvm
我通过 Google 和 StackOverflow 进行了大量搜索,但没有解决我的问题。
我有两个 Xaml 文件:
主窗口.xaml
<Window x:Name="mainWindow">
<Window.DataContext>
<!-- Instantiate ViewModel of the MainWindow -->
<vm:MainWindowViewModel x:Name="viewModel"/>
</Window.DataContext>
<!-- Create the Menu of the MainWindow -->
<custom:MainMenu Grid.Row="0"/>
<ad:DockingManager x:Name="dockingManager">
<!-- ... -->
</Window>
Run Code Online (Sandbox Code Playgroud)
和MainMenu.xaml
<UserControl>
<Menu>
<MenuItem Header="{t:Translate MENU_LAYOUT_SAVE}" Command="{Binding SaveLayoutCommand}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=Window}}"/>
<MenuItem Header="{t:Translate MENU_LAYOUT_LOAD}" Command="{Binding LoadLayoutCommand}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=Window}}"/>
</Menu>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
在这里我的问题发生了。我想x:Name="dockingManager"从 MainWindow传递 DockingManager ,而不是传递 Mainwindow 对象。但是,如果我尝试通过名称引用该对象,则会失败...
我尝试了以下绑定:
CommandParameter="{Binding ElementName=dockingManager}"
CommandParameter="{Binding ElementName=dockingManager, RelativeSource={RelativeSource AncestorType=Window}}"
Run Code Online (Sandbox Code Playgroud)
那么我如何才能dockingManager从 xaml 中的 ElementTree 中找到并引用一个 Object ( )。我想避免在代码隐藏中使用额外的代码。
试试CommandParameter="{Binding ElementName=dockingManager, Path=.}"。
编辑:以前的答案不起作用。这是一个可行的想法......
在 Window.xaml 中:
<custom:MainMenu Grid.Row="0" Tag="{Binding ElementName=dockingManager}" />
Run Code Online (Sandbox Code Playgroud)
在 MainMenu.xaml 中:
<UserControl x:Name="UcMainMenu" />
...
<MenuItem Header="{t:Translate MENU_LAYOUT_SAVE}" Command="{Binding SaveLayoutCommand}" CommandParameter="{Binding ElementName=UcMainMenu, Path=Tag}"/>
Run Code Online (Sandbox Code Playgroud)
您可以使用:
CommandParameter="{x:Reference Name=yourElementName}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6614 次 |
| 最近记录: |