C# 无法转换为基类
我正在用一个组合框和一个数据网格构建一个wpf表单。combobox绑定到模型基类moWeek的集合。所选项被绑定到一个名为wm的驱动类,如下所示C# 无法转换为基类,c#,wpf,mvvm,C#,Wpf,Mvvm,我正在用一个组合框和一个数据网格构建一个wpf表单。combobox绑定到模型基类moWeek的集合。所选项被绑定到一个名为wm的驱动类,如下所示SelectedItem=“{Binding Week,Mode=TwoWay}”,而它只是Viewmodel类中类型vm的属性 现在,当我从组合框中选择a值时,我得到一个名为type converter cannot convert model.moWeek的System.NotSupportedException 我想我需要一些从moWeek到vm
SelectedItem=“{Binding Week,Mode=TwoWay}”
,而它只是Viewmodel类中类型vm
的属性
现在,当我从组合框中选择a值时,我得到一个名为type converter cannot convert model.moWeek的System.NotSupportedException
我想我需要一些从moWeek到vmWeek的转换器,但我不知道放在哪里,怎么放。我该怎么做
代码如下:
车型周课程:
using System.Collections.ObjectModel;
namespace Model
{
public class moWeek
{
public moWeek()
{
}
private int id;
public int Id
{
get { return id; }
set { id = value; }
}
}
}
using System;
using System.ComponentModel;
using Model;
using ViewModel.Lists;
namespace ViewModel.Planning
{
public class vmWeek : moWeek
{
private ProjectList projects;
public ProjectList Projects
{
get { return projects; }
set { projects = value; OnPropertyChanged(new PropertyChangedEventArgs("Projects")); }
}
private void OnPropertyChanged(PropertyChangedEventArgs propertyChangedEventArgs)
{
throw new NotImplementedException();
}
}
}
Viewmodel周课程:
using System.Collections.ObjectModel;
namespace Model
{
public class moWeek
{
public moWeek()
{
}
private int id;
public int Id
{
get { return id; }
set { id = value; }
}
}
}
using System;
using System.ComponentModel;
using Model;
using ViewModel.Lists;
namespace ViewModel.Planning
{
public class vmWeek : moWeek
{
private ProjectList projects;
public ProjectList Projects
{
get { return projects; }
set { projects = value; OnPropertyChanged(new PropertyChangedEventArgs("Projects")); }
}
private void OnPropertyChanged(PropertyChangedEventArgs propertyChangedEventArgs)
{
throw new NotImplementedException();
}
}
}
视图模型
using System.ComponentModel;
using tegViewModel.Auswahllisten;
namespace tegViewModel.Planning
{
public class vmPlanning : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public vmPlanning()
{
Weeks = new alWeeks(); //Collection of moWeek
}
public alWeeks Weeks { get; set; }
private vmWeek week;
public vmWeek Week
{
get { return Week; }
set { Week = value; OnPropertyChanged(new PropertyChangedEventArgs("Week")); }
}
private void OnPropertyChanged(PropertyChangedEventArgs propertyChangedEventArgs)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyChangedEventArgs.PropertyName));
}
}
}
}
首先,您需要创建一个实现接口
IValueConverter
[ValueConversion(typeof(moWeek), typeof(vmWeek))]
class MoWeekToVmWeekConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var moweek = value as moWeek;
vmWeek result = //Do your conversion;
return result;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return (moWeek) value;
}
}
之后,您可以在参考资料中声明该类的实例
<local:MoWeekToVmWeekConverter x:Key="MoWeekConverter"></local:MoWeekToVmWeekConverter>
声明转换器后,可以在绑定中使用它
<ComboBox SelectedItem="{Binding Week, Mode=TwoWay, Converter={StaticResource MoWeekConverter}}"></ComboBox>
谢谢,这很好用。顺便说一下,我找到了另一个解决方案,通过将周的类型改为VMWAY的集合,并将一个隐式转换器转换成ALWek集合。我想知道为什么你不能这么做:)我决定把它当作一个先决条件。