2013-08-18 19 views
3

我在我的視圖中添加了DatePicker,並且出現Visibility屬性(我沒有配置)的錯誤。DatePicker引發可視性異常

的錯誤是:

System.Windows.Data Error: 'MS.Internal.Data.DynamicValueConverter' converter failed to convert value '8/18/1993' (type 'System.String'); BindingExpression: Path='DateOfBirth' DataItem='Gui.ViewModels.RegisterPersonalViewModel' (HashCode=64515557); target element is 'Microsoft.Phone.Controls.DatePicker' (Name='DateOfBirth'); target property is 'Visibility' (type 'System.Windows.Visibility').. System.ArgumentException: Requested value '8/18/1993' was not found. 
    at System.Enum.EnumResult.SetFailure(ParseFailureKind failure, String failureMessageID, Object failureMessageFormatArgument) 
    at System.Enum.TryParseEnum(Type enumType, String value, Boolean ignoreCase, EnumResult& parseResult) 
    at System.Enum.Parse(Type enumType, String value, Boolean ignoreCase) 
    at MS.Internal.SilverlightTypeConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value) 
    at MS.Internal.Data.DefaultValueConverter.ConvertHelper(Object o, Type destinationType, CultureInfo culture, Boolean isForward) 
    at MS.Internal.Data.TargetDefaultValueConverter.Convert(Object o, Type type, Object parameter, CultureInfo culture) 
    at MS.Internal.Data.DynamicValueConverter.Convert(Object value, Type targetType, Object parameter, CultureInfo culture) 
    at System.Windows.Data.BindingExpression.ConvertToTarget(Object value). 

的視野看起來像:

<toolkit:DatePicker x:Name="DateOfBirth" /> 

並在視圖模型中的財產:

public DateTime DateOfBirth { get; set; } 

因此,我什麼都沒有,其映射對該字段的可見性屬性。那麼爲什麼它會做出這種約束呢?

我也嘗試添加可見性這樣的結合:

<toolkit:DatePicker x:Name="DateOfBirth" 
         Visibility="{Binding Path=IsDateOfBirthVisible, 
            Converter={StaticResource BooleanToVisibilityConverter}}"/> 

,並添加一個字段:

public DateTime DateOfBirth { get; set; } 
public bool IsDateOfBirthVisible { get; set; } 

但後來我得到以下異常:

例外System.Windows.ni.dll中發生類型爲「System.Exception」的錯誤,並未在託管/本機邊界之前處理

我也嘗試添加自定義的約定:

ConventionManager.AddElementConvention<DatePicker>(DateTimePickerBase.ValueProperty, "Value", "SelectedDate"); 
ConventionManager.AddElementConvention<DatePicker>(DateTimePickerBase.ValueStringFormatProperty, "ValueStringFormat", "ValueStringFormatChanged"); 
ConventionManager.AddElementConvention<DatePicker>(DateTimePickerBase.ValueStringProperty, "ValueString", "ValueStringChanged"); 
ConventionManager.AddElementConvention<DatePicker>(UIElement.VisibilityProperty, "Visibility", "VisibilityChanged"); 

但是,這並不有所作爲。

我是新來的caliburn和windows手機,所以可能有一個愚蠢的錯誤的地方。

如何擺脫該異常?

(該日期選擇是從https://phone.codeplex.com/

+0

來自誤差是似乎對能見度的結合是將日期項,而不是爲布爾項,BindingExpression:路徑=「DATEOFBIRTH」的DataItem =「Gui.ViewModels.RegisterPersonalViewModel」(的HashCode = 64515557);目標元素是'Microsoft.Phone.Controls.DatePicker'(Name ='DateOfBirth');目標屬性是'可見性'(類型'System.Windows.Visibility').. System.ArgumentException:請求值'8/18/1993'未找到。 – whoisthis

+0

@bjoshi:但爲什麼它會嘗試使用可見性? – jgauffin

+0

這很奇怪。您是否嘗試刪除'x:Name'屬性以查看問題是否仍然存在,我的意思是不是精益CM自動配置綁定? –

回答

2

Caliburn.Micro具有 「捕捉所有」 公約definied上結合的視圖模型的匹配性的FrameworkElement.VisibilityProperty

AddElementConvention<FrameworkElement>(
    FrameworkElement.VisibilityProperty, "DataContext", "Loaded"); 

因爲FrameworkElement Caliburn.Micro不知道Microsoft.Phone.Controls.DatePicker類型或其基類(DateTimePickerBase,Control)它回退到FrameworkElement約定,它試圖綁定您的DateTimeDatePickerVisibilityProperty,這樣您可以在「輸出」窗口中看到異常。

解決辦法有兩個:

  • 寫綁定手:<toolkit:DatePicker Value="{Bidning DateOfBirth}" />
  • 創建一個自定義的公約,這是在這種情況下:

    ConventionManager.AddElementConvention<DatePicker>(
        DateTimePickerBase.ValueProperty, "Value", "SelectedDate"); 
    

    注意:你只能有一個給定類型的傳達,所以這應該是你的只有AddElementConvention<DatePicker>調用。