首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF/ MVVM :重构代码隐藏,使其为MVVM绑定做好准备

WPF/ MVVM :重构代码隐藏,使其为MVVM绑定做好准备
EN

Stack Overflow用户
提问于 2010-06-26 04:15:20
回答 1查看 782关注 0票数 0

我在我的视图的代码隐藏文件中有以下代码:

代码语言:javascript
复制
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中。问题已经从XAML中的CurrentColumn.DisplayIndex开始了。我不能用绑定来声明它,因为语法是不允许的。WPF认为DisplayIndex是一个附加属性...

你怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-30 06:52:30

在处理诸如数据网格之类的复杂控件时,实现纯粹的XAML / ViewModel分离可能会非常复杂。在某些情况下,最好在后面编写一些代码,以实现更干净的XAML和代码。

也许可以试一下

代码语言:javascript
复制
private void dgTimeTable_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{        
    var columnNumber = dgTimeTable.CurrentCell.Column.DisplayIndex;
    ((YourViewModel)DataContext).SetDisplayIndex(columnNumber);
}

在你的视图模型中有剩余的代码

代码语言:javascript
复制
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到视图模型的绑定

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3121150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档