2010-06-25 95 views
0

我在这段代码的代码隐藏我的视图文件:WPF/MVVM:重构代码隐藏,使其准备好MVVM结合

private string GetSelectedSchoolclassCode() 
    { 
     return ((SchoolclassCode)cboSchooclassCodeList.SelectedItem).SchoolclassCodeName; 
    } 

    private void dgTimeTable_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    {   
     var columnNumber = dgTimeTable.CurrentCell.Column.DisplayIndex; 
     var timetable = dgTimeTable.CurrentItem as TimeTableViewModel; 

     switch (columnNumber) 
     { 
      case 0: timetable.SchoolclassCodeMonday = GetItemValue(timetable.SchoolclassCodeMonday); break; 
      case 1: timetable.SchoolclassCodeTuesday = GetItemValue(timetable.SchoolclassCodeTuesday); break; 
      case 2: timetable.SchoolclassCodeWednesday = GetItemValue(timetable.SchoolclassCodeWednesday); break; 
      case 3: timetable.SchoolclassCodeThursday = GetItemValue(timetable.SchoolclassCodeThursday); break; 
      case 4: timetable.SchoolclassCodeFriday = GetItemValue(timetable.SchoolclassCodeFriday); break; 
      case 5: timetable.SchoolclassCodeSaturday = GetItemValue(timetable.SchoolclassCodeSaturday); break; 
      case 6: timetable.SchoolclassCodeSunday = GetItemValue(timetable.SchoolclassCodeSunday); break; 
     } 
    } 

    private string GetItemValue(string schoolclassCodeWeekDay) 
    { 
     if (schoolclassCodeWeekDay == null) 
      schoolclassCodeWeekDay = GetSelectedSchoolclassCode(); 
     else 
      schoolclassCodeWeekDay = null; 

     return schoolclassCodeWeekDay; 
    } 

我愿把所有的代码视图模型。 此问题已从XAML中的CurrentColumn.DisplayIndex开始。由于语法不允许,我无法用绑定声明它。 WPF认为DisplayIndex是附属性...

你会做什么?

+1

这是什么意思“WPF认为”?如果你正在做绑定,你可以并且必须提供完整路径,如果它不明显,那么也是Source。没有想法。除此之外,这种转变是可怕的。枚举具有数值,可以写入一行。 – kubal5003 2010-06-25 23:22:19

+0

没有枚举... – msfanboy 2010-06-30 11:05:58

回答

0

在处理复杂的控件(如数据网格)时,它可能会受到欺骗,并且非常复杂,无法获得纯XAML/ViewModel分隔。在某些情况下,最好有一点代码来实现清晰的XAML和代码。

也许尝试

private void dgTimeTable_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{   
    var columnNumber = dgTimeTable.CurrentCell.Column.DisplayIndex; 
    ((YourViewModel)DataContext).SetDisplayIndex(columnNumber); 
} 

,并在您的视图模型具有的代码

private string GetSelectedSchoolclassCode() 
{ 
    return ((SchoolclassCode)SelectedSchooclass).SchoolclassCodeName; 
} 

public int SetDisplayIndex(int columnNmber) 
{   
     var timetable = CurrentItem as TimeTableViewModel; 

     switch (columnNumber) 
     { 
      case 0: timetable.SchoolclassCodeMonday = GetItemValue(timetable.SchoolclassCodeMonday); break; 
      case 1: timetable.SchoolclassCodeTuesday = GetItemValue(timetable.SchoolclassCodeTuesday); break; 
      case 2: timetable.SchoolclassCodeWednesday = GetItemValue(timetable.SchoolclassCodeWednesday); break; 
      case 3: timetable.SchoolclassCodeThursday = GetItemValue(timetable.SchoolclassCodeThursday); break; 
      case 4: timetable.SchoolclassCodeFriday = GetItemValue(timetable.SchoolclassCodeFriday); break; 
      case 5: timetable.SchoolclassCodeSaturday = GetItemValue(timetable.SchoolclassCodeSaturday); break; 
      case 6: timetable.SchoolclassCodeSunday = GetItemValue(timetable.SchoolclassCodeSunday); break; 
     } 
    } 

private string GetItemValue(string schoolclassCodeWeekDay) 
{ 
    if (schoolclassCodeWeekDay == null) 
     schoolclassCodeWeekDay = GetSelectedSchoolclassCode(); 
    else 
     schoolclassCodeWeekDay = null; 

    return schoolclassCodeWeekDay; 
} 

只要你包括在组合框中SelectedSchooclass并在数据网格视图的CURRENTITEM绑定的休息模型