【发布时间】:2016-06-20 16:53:06
【问题描述】:
我创建了一个以 ViewModelA() 作为其 ViewModel 的用户控件,然后在我的视图中,有一个 StackPanel 使用 ViewModelA.Data 作为 DataContext。
我的问题在这个 StackPanel 内部,我有一个按钮需要在 ViewModelA() 中实现我创建的 ICommand。我该怎么做?
有类似<Button DataContext="DataContext.Parent" /> 之类的吗?
这是我实现 ViewModel 和 View 的方式:
App.xaml
<DataTemplate DataType="{x:Type vm:ViewModelA}">
<vw:ViewA />
</DataTemplate>
ViewA.xaml(堆栈面板内的按钮应该实现 ICommand)
<StackPanel x:Name="RightPaneDetails"
Grid.Column="1"
Margin="15,0,0,30"
DataContext="{Binding Data}">
<!-- Some controls goes here that binds to ViewModelA.Data properties -->
<StackPanel Orientation="Horizontal">
<Button DataContext={Binding} Command="{Binding LookupCommand}" /> <!-- This button should implement the ViewModelA.LookupCommand -->
</StackPanel>
</StackPanel>
TIA
PS,ViewModelA.Data 是我的模型。
【问题讨论】:
-
DataContext 是沿可视化树继承的,根本不需要指定 DataContext。删除 ViewA 中的所有 DataContext,所有控件都应默认其 DataContext 回 ViewModelA。
-
是的,我明白了。但是我的控件(文本框和标签)受 ViewModelA.Data 属性的限制...如果我删除
<StackPanel DataContext="{Binding Data}"> ...... </StackPanel>然后将所有绑定控件作为<TextBox Text="{Binding Data.LastName}" />放入我的所有绑定控件会很丑吗? -
在没有 DataContext 部分的情况下尝试 AnjumSKhan 的答案。
-
@Jai - 我试过了,但还是不行。 Button 仍在查看 Data 而不是 ViewModelA...
-
@Jai - 不用等待......它成功了!!!谢谢!