我在第一次涉足 WPF 领域时遇到了问题,试图从 XAML 填充自定义模型类中的列表。
我遇到的异常是:
Additional information: 'Set property 'Project.Model.GanttModel.Tasks' threw an exception.' Line number '19' and line position '27'.
这是 Model:GanttModel... 行。
我的问题是如何填充“GanttModelTest”模型的“TasksTest”列表的元素?
我的模型类:
public class GanttModel : DependencyObject {
public static readonly DependencyProperty TasksProperty = DependencyProperty.Register("Tasks", typeof(ObservableCollection<Task>), typeof(GanttModel));
public static readonly DependencyProperty ChartDateRangeProperty = DependencyProperty.Register("ChartDateRange", typeof(DateTimeRange), typeof(GanttModel));
public DateTimeRange ChartDateRange {
get {
return GetValue(ChartDateRangeProperty) as DateTimeRange;
}
set {
SetValue(ChartDateRangeProperty, value);
}
}
public ObservableCollection<Task> Tasks {
get {
return GetValue(TasksProperty) as ObservableCollection<Task>;
}
set {
SetValue(TasksProperty, value);
}
}
public GanttModel() {
this.Tasks = new ObservableCollection<Task>();
}
}
我的 XAML 的相关部分:
<UserControl.Resources>
<x:Array x:Key="TasksTest" Type="Model:Task">
<Model:Task Name="Task 1" Start="07-20-2013" Finish="08-01-2013" />
<Model:Task Name="Task 2" Start="07-19-2013" Finish="07-31-2013" />
<Model:Task Name="Task 3" Start="07-18-2013" Finish="07-30-2013" />
<Model:Task Name="Task 4" Start="07-17-2013" Finish="07-29-2013" />
<Model:Task Name="Task 5" Start="07-16-2013" Finish="07-28-2013" />
</x:Array>
<Model:GanttModel x:Key="GanttModelTest"
ChartDateRange="07-01-2013,08-01-2013"
Tasks="{StaticResource TasksTest}" />
etc...etc...etc...
<ListBox x:Name="GanttTasks"
ItemsSource="{StaticResource GanttModelTest}"
ItemTemplate="{StaticResource TaskTemplate}"/>
</UserControl>
最佳答案
你的 TasksProperty
类型是 ObservableCollection<Task>
但你试图分配一个 Task[]
给它。因为这两种类型之间没有隐式约定,这就是 Set 抛出异常的原因。
你有两个选择:
更改您的 TasksProperty
使用 Task[]
而不是 ObservableCollection<Task>
.
或者构建一个 ObservableCollection<Task>
在 XAML 中,但因为您不能在 WPF 中使用 XAML2009 功能,所以不能直接在 WPF XAML 中创建 ObservableCollection。另请参阅文档:Notes on XAML Usage .
您可以做的是从 ObservableCollection
派生
public class TaskCollection : ObservableCollection<Task> { }
现在您可以在 XAML 中使用这个非通用版本:
<Model:TaskCollection x:Key="TasksTest">
<Model:Task Name="Task 1" Start="07-20-2013" Finish="08-01-2013" />
<Model:Task Name="Task 2" Start="07-19-2013" Finish="07-31-2013" />
<Model:Task Name="Task 3" Start="07-18-2013" Finish="07-30-2013" />
<Model:Task Name="Task 4" Start="07-17-2013" Finish="07-29-2013" />
<Model:Task Name="Task 5" Start="07-16-2013" Finish="07-28-2013" />
</Model:TaskCollection>
关于c# - WPF C# 如何使用 x :array 在 WPF 中的自定义模型类中绑定(bind)和设置列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17897763/