2

我的应用程序需要打开一个UserControl需要parameter/property包含一年的应用程序。今年我将让我的控件显示一些编辑值。

我遇到了一个问题,即我Window.Resource声明的部分有一个contextmenu我正在附加到一个Gridview. 从这个contextmenu资源中,我无法直接绑定到我CommandsViewModel.

我通过在我ViewModel的. 不幸的是,这会导致我的 xaml 生成我的 ViewModel,并且我无法传递我的参数或属性“年份”,并且当我检索我的数据时,它是为 year=0 完成的。StaticResourceXaml

有没有办法替换我为上下文菜单提供的视图模型绑定,以便它可以访问我在代码中设置的视图模型?

<UserControl.Resources>
    <vm:ViewModel x:Key="viewModel" />

    <ribbon:ContextMenu x:Key="MyContextMenu"
                         x:Shared="False"
                         Placement="MousePoint" >
        <ribbon:Menu Focusable="false">
            <ribbon:Button 
                Command="{Binding Source={StaticResource viewModel}, Path=MyCommand}"
                Label="MyLabel"/>
        </ribbon:Menu>
    </ribbon:ContextMenu>

</UserControl.Resources>
4

1 回答 1

3

是的,这是可能的。您可以创建一个包含 DataContext 的虚拟类:

public class Proxy:DependencyObject
{
    public static readonly DependencyProperty DataProperty = DependencyProperty.Register("Data", typeof(object), typeof(Proxy));
    public object Data 
    {
        get { return this.GetValue(DataProperty); }
        set { this.SetValue(DataProperty, value); }
    }
}

在资源中引用它并将 DataContext 绑定到它的数据属性:

<UserControl.Resources>
    <local:Proxy x:Key="proxy" Data="{Binding}"/>
</UserControl.Resources>

现在 Data 属性保存了您的 ViewModel,您可以像这样绑定到它:

<ribbon:ContextMenu x:Key="MyContextMenu"
                     x:Shared="False"
                     Placement="MousePoint" >
    <ribbon:Menu Focusable="false">
        <ribbon:Button 
            Command="{Binding Source={StaticResource proxy}, Path=Data.MyCommand}"
            Label="MyLabel"/>
    </ribbon:Menu>
</ribbon:ContextMenu>
于 2013-05-06T12:59:06.670 回答