如何在 MainWindow 中绑定 WPF DatePicker 以便在 UserControl 中使用?

How to Bind WPF DatePicker in MainWindow for Use in a UserControl?

我在 MainWindow.xaml 上放置了两个 DatePicker 控件,如下所示:

<DatePicker Name="dpStartDate"
                    SelectedDate="{Binding Path=StartDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                    DisplayDateStart="1/1/2018"
                    FirstDayOfWeek="Sunday"/>
        <Label Name="lblEndDate" Content ="End Date:"/>
        <DatePicker Name="dpEndDate"
                    SelectedDate = "{Binding Path = EndDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                    DisplayDateStart="1/1/2018"
                    FirstDayOfWeek="Sunday"/>

我的目的是让所有条目用户控件查询后端数据(在本例中为 Quickbooks)和 return 与 MainWindow DatePicker 控件中的开始和结束日期值匹配的记录。

A​​llEntriesclass如下:

private void EntriesDataGrid_OnLoaded(object sender, RoutedEventArgs e)
    {
        bool sessionBegun = false;
        bool connectionOpen = false;
        DatePicker dpStartDate;
        DatePicker dpEndDate;
        QBSessionManager sessionManager = null;

        try
        {
            //Create Session Manager
            sessionManager = new QBSessionManager();

            //Create the request to obtain the Profit and Loss Summary Report
            IMsgSetRequest requestMsgSet = sessionManager.CreateMsgSetRequest("US", 8, 0);
            requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue;

            //Connect to QB Desktop and begin a Session
            sessionManager.OpenConnection(
                @"C:\Users\Public\Public Documents\Intuit\QuickBooks\Company Files\MyCompany.QBW",
                "MyCompany");

            connectionOpen = true;
            sessionManager.BeginSession("", ENOpenMode.omDontCare);
            sessionBegun = true;

            IGeneralDetailReportQuery plQuery = requestMsgSet.AppendGeneralDetailReportQueryRq();
            plQuery.GeneralDetailReportType.SetValue(ENGeneralDetailReportType.gdrtTxnListByDate);
            plQuery.DisplayReport.SetValue(true);
            //TODO:  Set FromReportDate and ToReportDate equal to plStartDate.SelectedDate and plEndDate.SelectedDate
            //plQuery.ORReportPeriod.ReportPeriod.FromReportDate = ;
            //plQuery.ORReportPeriod.ReportPeriod.ToReportDate = ;
            IMsgSetResponse responseMsgSet = sessionManager.DoRequests(requestMsgSet);
            IResponse response = responseMsgSet.ResponseList.GetAt(0);
            IORReportData reportData = (IORReportData)response.Detail;

            //TODO: Create list of report items building from model class(es).
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error");
        }
        finally
        {
            if (sessionBegun)
            {
                sessionManager.EndSession();
            }

            if (connectionOpen)
            {
                sessionManager.CloseConnection();
            }
        }
    }

如何从 MainWindow 绑定 DatePicker 值并将它们用作查询请求的变量?

为 UserControl 提供两个 public 类型 DateTime? 的依赖属性。在绑定中使用 ElementName 将这些属性绑定到日期选择器的值。

我认为您会希望在依赖项 属性 值更改时更新 AllEntries,而不是仅在 OnLoaded() 中更新。我敦促你把 OnLoaded() 的内容全部放在另一个名为 RunQuery() 的方法中,然后从 OnLoaded()、从依赖项 属性 更改的处理程序中调用该方法,或者任何地方。