在用户控制的情况下,数据上下文不可访问

本文关键字:上下文 访问 数据 用户 控制 情况下 | 更新日期: 2023-09-27 18:35:39

我正在为以下情况寻求解决方案

在我的 Windows 10 应用程序中,我有一个 order.xaml,在该页面中我有一个用户控件,我成功地从用户控件中的订单页面接收数据上下文。但是OrderItemList_Loaded当事件在我的用户控制范围内触发时,在这种情况下我不会收到 DataContext,它是空的。在用户控制范围内发生事件时,如何访问数据上下文?

下面是用户控制的代码。

public sealed partial class OrderItemsUserControl : UserControl
{
    public OrderViewModel order
    {
        get { return this.DataContext as OrderViewModel; }
    }
    public OrderItemsUserControl()
    {
        this.InitializeComponent();
        this.DataContextChanged += (s, e) => Bindings.Update();
    }

    private void OrderItemList_Loaded(object sender, RoutedEventArgs e)
    {
        order.OrderItems.CollectionChanged += (s, args) => ScrollToBottom();
    }
    private void ScrollToBottom()
    {
        ListScrollViewer.Measure(ListScrollViewer.RenderSize);
        ListScrollViewer.ScrollToVerticalOffset(ListScrollViewer.ScrollableHeight);
    }
}

在用户控制的情况下,数据上下文不可访问

由于 UserControl 似乎具有与视图页面不同的 dataContext,并且您说"在数据上下文中我正在获取 OrderItems",因此删除方法"public OrderViewModel order"并更改代码以摆脱如下所示的顺序:

private void OrderItemList_Loaded(object sender, RoutedEventArgs e)
    {
        OrderItems.CollectionChanged += (s, args) => ScrollToBottom();
    }

假设 OrderItems 是在此视图中声明的有效引用模型。