如何刷新下拉并不总是刷新数据?
问题描述:
在这段代码中,我们有一个下拉组合框供用户选择显示数据的状态。在某些情况下,它不会令人耳目一新 - 我如何在这里添加一个简单的刷新?在这些地方的情况下启动:如何刷新下拉并不总是刷新数据?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OPTFDashboard.Common.Modules.Schedules.DataModel;
using OPTFDashboard.DataAccess;
using OPTFDashboard.DataModel;
namespace OPTFDashboard.Common.Modules.Schedules.DataAccess
{
public class SchedulesRepository
{
public static void Summary(IEnumerable<Facility> facilities, DateTime fromDate, DateTime toDate, Action<MonthlySchedules> completionHandler)
{
DBHelper.Execute(
DBHelper.StoredProcedure("OGEN.DBD_GET_MONTHLY_SCHEDULES",
new DBHelper.Parameter("@FACILITYKEY", String.Join(",", facilities.Select(f => String.Format("{0}", f.FacilityKey)))),
new DBHelper.Parameter("@FromDate", fromDate),
new DBHelper.Parameter("@ToDate", toDate)
),
(reader) =>
{
completionHandler((reader == null || !reader.Read()) ? null :
new MonthlySchedules((Decimal)reader["COMPLETED"], (Decimal)reader["UNCOMPLETED"], (Decimal)reader["LATE"]));
});
}
public static void Mixed(IEnumerable<Facility> facilities, Action<List<ScheduleMIXED>> completionHandler)
{
DBHelper.Execute(
DBHelper.StoredProcedure("OGEN.DBD_GET_SCHEDULE_MIX",
new DBHelper.Parameter("@FACILITYKEY", String.Join(",", facilities.Select(f => String.Format("{0}", f.FacilityKey))))
//,
//new DBHelper.Parameter("@UNITSTR", unit),
//new DBHelper.Parameter("@FromDate", fromDate),
//new DBHelper.Parameter("@ToDate", toDate)
),
(reader) =>
{
var schedules = new List<ScheduleMIXED>();
while (reader != null && reader.Read())
schedules.Add(new ScheduleMIXED((String)reader["ROW_NAME"], (Decimal)reader["COMP"], (Decimal)reader["EOT_COT"], (Decimal)reader["PPS"], (Decimal)reader["QUART"], (Decimal)reader["TRACK"], (Decimal)reader["OTHER"]));
completionHandler(schedules);
});
}
public static void Details(IEnumerable<Facility> facilities, String unit, String type, DateTime fromDate, DateTime toDate, Action<List<Schedule>> completionHandler)
{
String storeName = String.Empty;
switch (type)
// switch (type.Trim().ToUpper())
{
case "NOT STARTED - LATE":
storeName = "OGEN.DBD_GET_SCHEDULE_LATE_DETAIL";
break;
case "COMPLETED":
storeName = "OGEN.DBD_GET_SCHEDULE_COMPLETED_DETAIL";
break;
case "INCOMPLETE":
storeName = "OGEN.DBD_GET_SCHEDULE_UNCOMPLETED_DETAIL";
break;
case "All":
storeName = "OGEN.DBD_GET_SCHEDULE_ALL_DETAIL";
break;
case "SUBMITTED":
storeName = "OGEN.DBD_GET_SCHEDULE_SUBMITTED_DETAIL";
break;
// new ones:
case "SUBMITTED LATE":
storeName = "OGEN.DBD_GET_SCHEDULE_SUBMITTED_LATE";
break;
case "NOT STARTED":
storeName = "OGEN.DBD_GET_SCHEDULE_NOT_STARTED";
break;
case "COMPLETED LATE":
storeName = "OGEN.DBD_GET_SCHEDULE_COMPLETED_LATE";
break;
case "INCOMPLETE LATE":
storeName = "OGEN.DBD_GET_SCHEDULE_UNCOMPLETED_LATE";
break;
}
DBHelper.Execute(
DBHelper.StoredProcedure(storeName,
new DBHelper.Parameter("@FACILITYKEY", String.Join(",", facilities.Select(f => String.Format("{0}", f.FacilityKey)))),
new DBHelper.Parameter("@UNITSTR", unit),
new DBHelper.Parameter("@FromDate", fromDate),
new DBHelper.Parameter("@ToDate", toDate)
),
(reader) =>
{
var schedules = new List<Schedule>();
if (reader != null && !reader.IsClosed)
while (reader.Read())
{
Schedule objSchedule = new Schedule() { FACILITY_KEY = (String)reader ["FACILITY_KEY"], UNIT = (String)reader["UNIT_CODE"], PATIENT_ID = Convert.ToString(reader["PATIENT_ID"]).Trim(), PATIENT_NAME = (!DBNull.Value.Equals(reader["PATIENT_ID"]) ? (String)reader["PATIENT_NAME"] : String.Empty) };
// reference date taken out.
// if (!DBNull.Value.Equals(reader["REFERENCE_DATE"]))
{
// objSchedule.REFERENCE_DATE = (DateTime)reader["REFERENCE_DATE"];
}
if (!DBNull.Value.Equals(reader["A3A_DATE_USER"]))
{
objSchedule.A3A_DATE_USER = (DateTime)reader["A3A_DATE_USER"];
}
objSchedule.ASSESSMENTS = (String)reader["ASSESSMENTS"];
if (!DBNull.Value.Equals(reader["BASE_REASON"]))
{
objSchedule.BASE_REASON = (String)reader["BASE_REASON"];
}
if (!DBNull.Value.Equals(reader["TRACK_DESC"]))
{
objSchedule.TRACK_DESC = (String)reader["TRACK_DESC"];
}
schedules.Add(objSchedule);
}
completionHandler(schedules);
});
}
}
}
这里是实现INotifyPropertyChanged,并具有用于装载组合框
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.Composition;
using OPTFDashboard.ViewModel;
using System.Collections.ObjectModel;
using OPTFDashboard.Common.Ribbon;
using OPTFDashboard.Common.Utility;
using OPTFDashboard.DataModel;
using System.Windows.Data;
using OPTFDashboard.Common.Modules.Schedules.DataAccess;
namespace OPTFDashboard.Common.Modules.Schedules.ViewModels
{
[Export]
class ScheduleViewModel : TabViewModel, ISelectedContentTab
{
//
private readonly String[] _assessmentType = new String[] { "All", "INCOMPLETE", "COMPLETED", "COMPLETED LATE", "INCOMPLETE LATE", "NOT STARTED - LATE", "NOT STARTED", "SUBMITTED", "SUBMITTED LATE" };
//pk display ALL as default in detail tab.
//
public ScheduleViewModel()
: base()
{
DisplayName = "Schedules";
StartDate = DateTime.Now.AddMonths(-6);
EndDate = DateTime.Now;
GroupDataCollection = new ObservableCollection<GroupData>()
{
// here is the combo box
RibbonControlHelper.CreateFacilitySelection()
, new GroupData("Criterria"
, RibbonControlHelper.CreateDateSelection(StartDate,EndDate,(s, e) => { StartDate = s; EndDate = e; RefreshData(); })
, RibbonControlHelper.CreateUnitSelection(UnitChanged)
, RibbonControlHelper.CreateComboBox("Assessment", "Assessment", "Select Assessment to show.", _assessmentType, (type) => { AssessmentType = type; })
)
};
}
protected override void RefreshData()
{
if (FacilitiesAreChanging) { return; }
Loading = true;
SchedulesRepository.Details(FacilitySelectionService.SelectedFacilities, UnitCode, AssessmentType, StartDate, EndDate,
(schedules) =>
{
var data = new ListCollectionView(schedules);
data.GroupDescriptions.Add(new PropertyGroupDescription("FACILITY_KEY"));
data.GroupDescriptions.Add(new PropertyGroupDescription("UNIT"));
Data = data;
Loading = false;
});
}
private ListCollectionView _Data;
public ListCollectionView Data
{
get { return _Data; }
set { this.SetReferenceProperty("Data", ref _Data, value); }
}
private DateTime startDate;
public DateTime StartDate
{
get { return startDate; }
set { startDate = value; }
}
private DateTime endDate;
public DateTime EndDate
{
get { return endDate; }
set { endDate = value; }
}
public ObservableCollection<GroupData> GroupDataCollection { get; private set; }
private String UnitCode { get; set; }
private void UnitChanged(Unit unit)
{
UnitCode = unit == null ? "" : unit.Description;
RefreshData();
}
private String _Type;
private String AssessmentType
{
get { return _Type; }
set { if (this.SetReferenceProperty("AssessmentType", ref _Type, value)) { RefreshData(); } }
}
}
}
答
设置用户控件的DataContext的东西(一个视图模型)的代码ComboBoxSource属性。然后将ComboBox ItemsSource绑定到属性名称。当你想刷新时,只需在ViewModel上设置属性即可。 PropertyChanged将会触发并且ItemsSource会自动更新。
答
绑定您的组合框的ObservableCollection
,然后随时添加或从集合你的UI将得到自动更新
<ComboBox ItemsSource="{Binding SomeCollection}" />
凡为
public ObservableCollection<string> SomeCollection { get; set; }
任何时候你添加SomeCollection
定义中删除项目或删除项目到SomeCollection
,UI将自动更新,因为您使用的是ObservableCollection
谢谢你,雷切尔,你可能会专门为我的代码编写代码,我没有得到它。 – Booksman
@Booksman你可以将实际加载项目的代码发布到你的ComboBox中吗?我没有看到你现在发布的内容。 – Rachel
是的,这里你有这个选项卡的几个文件,它可能会更快http://www.mediafire.com/download.php?o2mq15e22iu3cvc现在我会发布以及我们在这里我们有代码为cb的负载。 – Booksman