简体   繁体   English

如果发生用户控制,则无法访问DataContext

[英]DataContext is not Accessible in Event of User Control

I am seeking a solution for below situation 我正在寻找以下情况的解决方案

In my windows 10 app i have a order.xaml, inside that page i have a user control, i am successfully receiving the DataContext from order page in my user control. 在我的Windows 10应用程序中,我有一个order.xaml,在该页面中我有一个用户控件,我已经从我的用户控件中的订单页面成功接收了DataContext。 But when OrderItemList_Loaded event fires within my user control i dont receive DataContext in that case, it's null. 但是,在我的用户控件中触发OrderItemList_Loaded事件时,在这种情况下我没有收到DataContext,它为null。 How can i access the DataContext in case of event within user control? 如果用户控件中发生事件,如何访问DataContext?

Below is the code of User Control. 下面是用户控制的代码。

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);
    }
}

Since the UserControl appears to have a different dataContext than the View page, and you said "in datacontext i am getting OrderItems", then delete the method "public OrderViewModel order" and change code to get rid of order like: 由于UserControl似乎具有与View页面不同的dataContext,并且您说了“在datacontext中,我正在获取OrderItems”,因此删除方法“ public OrderViewModel order”并更改代码以消除顺序,例如:

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

Assuming OrderItems is a valid reference declaredin this viewModel. 假设OrderItems是在此viewModel中声明的有效引用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM