0

我有以下自定义 Silverlight 面包屑控件:

    <custom:BreadcrumbList Navigator="{Binding ModuleNavigator}">
        <custom:BreadcrumbList.Items>
            <custom:BreadcrumbItem ViewName="Home"/>
            <custom:BreadcrumbItem ViewName="Items"/>
            <custom:BreadcrumbItem Command="{Binding ReturnCommand}"/>
            <custom:BreadcrumbItem ViewName="ItemConstraints"/>
        </custom:BreadcrumbList.Items>
    </custom:BreadcrumbList>

我真的希望将Command属性BreadcrumbItem绑定到页面的数据上下文而不是父控件。我知道如何使用RelativeSourcebinding 参数在其他 XAML 环境中执行此操作,但这在这里不起作用。我怎么能在 Silverlight 中做到这一点?

谢谢。

4

2 回答 2

0

根据您的数据上下文的级别,有几种方法。如果您要绑定到数据网格本身中的元素,那么您可以使用与父控件类型的祖先类型的相对源的绑定。如果您有一个包含您要查找的数据的特定元素,则可以使用该元素名称和数据路径进行绑定。如果您在 xaml 中声明了视图模型,则可以绑定到静态资源并使用视图模型的名称和数据项的路径。

于 2013-06-07T21:34:46.067 回答
0

我确实找到了解决方案,我仍在等待更好的解决方案。BreadcrumbItem直接子类DependencyObject。我向其中添加了以下属性:

    private Object _parentContext = null;

    public Object ParentContext
    {
        get { return _parentContext; }
        set { _parentContext = value; RaisePropertyChanged("ParentContext"); }
    }

然后在(父控件)的情况下,我将所有项目Loaded属性设置为其数据上下文。BreadcrumbListParentContext

    private void OnLoaded(object sender, RoutedEventArgs e)
    {
        Loaded -= OnLoaded;

        foreach (var item in Items.OfType<BreadcrumbItem>())
            item.ParentContext = DataContext;
    }

然后我将我的 XAML 更改为:

<custom:BreadcrumbList Navigator="{Binding ModuleNavigator}">
    <custom:BreadcrumbList.Items>
        <custom:BreadcrumbItem ViewName="Home"/>
        <custom:BreadcrumbItem ViewName="Items"/>
        <custom:BreadcrumbItem Command="{Binding ParentContext.ReturnCommand}"/>
        <custom:BreadcrumbItem ViewName="ItemConstraints"/>
    </custom:BreadcrumbList.Items>
</custom:BreadcrumbList>

这可行,但我仍在寻找更好的选择。

于 2013-06-07T18:40:29.623 回答