如何在 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 控件中的开始和结束日期值匹配的记录。
AllEntriesclass如下:
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()
、从依赖项 属性 更改的处理程序中调用该方法,或者任何地方。
我在 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 控件中的开始和结束日期值匹配的记录。
AllEntriesclass如下:
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()
、从依赖项 属性 更改的处理程序中调用该方法,或者任何地方。