WPF / MVVM: рефакторинг Code-Behind, чтобы подготовить его к привязке MVVM - PullRequest
0 голосов
/ 26 июня 2010

У меня есть этот код в моем файле code-behind моего View:

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

Я хотел бы поместить весь этот код в ViewModel.Проблема уже начинается с CurrentColumn.DisplayIndex в XAML.Я не могу объявить это с привязкой, так как синтаксис не допускается.WPF считает, что DisplayIndex является вложенным свойством ...

Что бы вы сделали?

1 Ответ

0 голосов
/ 30 июня 2010

Может быть сложно и довольно сложно получить чистое разделение 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 и текущий элемент в сетке данных к модели представления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...