我正在设计一个用户控件来显示一个音符。所以我有一个NoteViewModel。在我的设计师中,我想要一个测试笔记。所以我在XAML中有以下内容:
<UserControl.Resources>
<local:NoteViewModel x:Key="ViewModel" d:IsDataSource="True">
<local:NoteViewModel.Note>
<localweb:Note
NoteID="1"
CreatedBy="Some Guy"
CreatedDate="2010-01-01 8:00 AM"
Category="Some Category"
NoteText="Some Text"
/>
</local:NoteViewModel.Note>
</local:NoteViewModel>
</UserControl.Resources>
这在设计时非常有用。但是在运行时我得到的错误是无法将“1”转换为Int32,并且无法将“2010-01-01 8:00 AM”转换为DateTime。为什么设计师能够处理这个而不是运行时?我应该如何更改我的XAML,以便设计人员可以显示测试笔记,但运行时不会崩溃?
答案 0 :(得分:1)
不知道为什么会发生这种情况,但为了解决Int的问题,你可以尝试为NoteID指定值的类型:
<localweb:Note xmlns:sys="clr-namespace:System;assembly=mscorelib" ...>
<localweb:Note.NoteID><sys:Int32>1</sys:Int32></localweb:Note.NoteID>
</localweb:Note>
有点长,但应该可以工作。
答案 1 :(得分:0)
设计人员通常比标准的运行时Xaml解析器更宽容。
我无法理解为什么它不能将“1”转换为Int32,因为int是本机解析Xaml的少数基本类型之一。您需要使用CreatedDate
装饰TypeConverterAttribute
属性: -
[TypeConverterAttribute(typeof(DateTimeTypeConverter))]
public CreatedDate { get; set; }
没有这个,xaml解析器实际上不知道如何处理日期。更糟糕的是,设计人员将使用标准UI文化来确定如何解析日期,而Xaml将经常使用不同的东西。我发现这个特殊问题非常棘手。