2011-11-17 95 views
0

在这段代码中,我们有一个下拉组合框供用户选择显示数据的状态。在某些情况下,它不会令人耳目一新 - 我如何在这里添加一个简单的刷新?在这些地方的情况下启动:如何刷新下拉并不总是刷新数据?

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

回答

1

设置用户控件的DataContext的东西(一个视图模型)的代码ComboBoxSource属性。然后将ComboBox ItemsSource绑定到属性名称。当你想刷新时,只需在ViewModel上设置属性即可。 PropertyChanged将会触发并且ItemsSource会自动更新。

1

绑定您的组合框的ObservableCollection,然后随时添加或从集合你的UI将得到自动更新

<ComboBox ItemsSource="{Binding SomeCollection}" /> 

凡为

public ObservableCollection<string> SomeCollection { get; set; } 

任何时候你添加SomeCollection定义中删除项目或删除项目到SomeCollection,UI将自动更新,因为您使用的是ObservableCollection

+0

谢谢你,雷切尔,你可能会专门为我的代码编写代码,我没有得到它。 – Booksman

+0

@Booksman你可以将实际加载项目的代码发布到你的ComboBox中吗?我没有看到你现在发布的内容。 – Rachel

+0

是的,这里你有这个选项卡的几个文件,它可能会更快http://www.mediafire.com/download.php?o2mq15e22iu3cvc现在我会发布以及我们在这里我们有代码为cb的负载。 – Booksman