我创建了一个名为EventMenu的小型UserControl。我使用以下方法在更大的视图中引用它:
<views:EventMenu
Grid.Row="1"
DataContext="{Binding DataContext.ServicingEventsMenuViewModel}"
/>
(我还试过DataContext="{Binding Path=DataContext.ServicingEventsMenuViewModel}"
)。
但是,控件中不会显示绑定数据上下文中的内容(控件的XAML文件中的静态内容确实出现)。我相信控件没有绑定DataContext。
在UserControl的构造函数背后的代码中,我已经完成了这个:
public EventMenu()
{
InitializeComponent();
if (DataContext == null)
{
Console.WriteLine("No data context!");
}
}
它确实表明DataContext为空。
我需要做些什么才能确保在UserControl上设置DataContext?
答案 0 :(得分:0)
我看到的第一个错误是:
DataContext="{Binding DataContext.ServicingEventsMenuViewModel}"
DataContext是FrameworkElement的依赖属性。
因此,在编写类似于你写的东西的时候,你写的就好像你的DataContext有一个名为DataContext的属性,它等同于写这个:
DataContext="{Binding Path=DataContext.ServicingEventsMenuViewModel}"
您是否尝试访问父元素的DataContext? 如果是这样你需要写这样的东西(例如,如果它的父亲是UserControl):
DataContext="{Binding Path=DataContext.ServicingEventsMenuViewModel,RelativeSource={RelativeSource AncestorType={x:Type UserControl}"
我猜这就是这种情况......
让我问你这个,发布
的xaml <views:EventMenu />
是嵌套的,并且该类包含ServicingEventsMenuViewModel属性。
我认为第二件事是错误的是在构造函数中检查你的DataContext是否为null,即使你写了正确的绑定语句,这个属性在构造函数中仍然是null。
订阅FrameworkElement的Loaded事件并在那里检查它。