私は3つのクラスAssignment
(抽象)、、、CourseAssignment
を持っていStudentAssignment
ます。 どちらも抽象クラスから継承StudentAssignment
します。CourseAssignment
Assignment
私は WPF カレンダーのルック アンド フィールを再フォーマットした複雑なスタイルを持っていますが、自分のカレンダーに割り当てを表示したいので、カスタム コントロールを作成しました ( MyCalendar
Calendar から継承し、依存関係プロパティを追加すると呼びます)。 (以下のコードを参照) これにより、割り当てリストをカレンダーにバインドできます。
public static DependencyProperty AssignmentsProperty =
DependencyProperty.Register
("Assignments",typeof(ObservableCollection<Assignment>),typeof(Calendar));
public ObservableCollection<Assignment> Assignments
{
get {return (ObservableCollection<Assignment>)GetValue(AssignmentsProperty);}
set {SetValue(AssignmentsProperty, value); }
}
カレンダー コントロールを配置するタブ コントロールに応じて、バインディングはStudentAssignment
またはの監視可能なコレクションになりますCourseAssignment
。CourseAssignment
カレンダーは、割り当てリストがまたはリストであるかどうかを実際に気にする必要はありません。StudentAssignment
必要なのは期日と説明だけだからです(両方のプロパティは基本抽象クラスにあります)が、ここに私の問題があります。IMultiValueConverter を使用して、割り当てを正しい日に配置しています
[ValueConversion(typeof(ObservableCollection<Assignment>), typeof(ObservableCollection<Assignment>))]
public class AssignmentConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
DateTime date = (DateTime)values[1];
ObservableCollection<Assignment> assignments = new ObservableCollection<Assignment>();
foreach (Assignment assignment in (ObservableCollection<Assignment>)values[0])
{
if (assignment.DueDate.Date == date)
{
assignments.Add(assignment);
}
}
return assignments;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
バインディングを機能させる最良の方法は何ですか? バインドを観察可能なコレクションに設定したいのはわかっていますが、XAML でそれを行うとcannot convert from observablecollection(CourseAssignment) to observablecollection(Assignment)
エラーが発生します。バインディングを行う前に、何らかの方法で CourseAssignments のコレクションを Assignments のコレクションに変換する必要がありますよね? それを行う最善の方法は何ですか?