我有以下自定义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
的{{1}}属性绑定到 页面的数据上下文而不是父控件。我知道如何在BreadcrumbItem
绑定参数的其他XAML环境中执行此操作,但这不起作用。我怎么能在Silverlight中这样做?
感谢。
答案 0 :(得分:0)
我确实找到了解决方案,我还在等待更好的解决方案。 BreadcrumbItem
子类直接DependencyObject
。我添加了以下属性:
private Object _parentContext = null;
public Object ParentContext
{
get { return _parentContext; }
set { _parentContext = value; RaisePropertyChanged("ParentContext"); }
}
然后在Loaded
(父控件)的BreadcrumbList
事件中,我将所有项ParentContext
属性设置为其数据上下文。
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>
这样可行,但我仍在寻找更好的选择。
答案 1 :(得分:0)
根据您的datacontext的级别,有几种方法。如果您绑定到数据网格中的元素本身,那么您可以使用与父控件类型的祖先类型的相对源绑定。 如果您有一个具有所需数据的特定元素,则可以使用该元素名称和数据路径进行绑定。 如果您在xaml中声明了视图模型,则可以绑定到静态资源,并使用视图模型的名称和数据项的路径。