XamlParseException Failed to assign to property. Binding not working with attached property
binding, exception, microsoft-metro, windows-runtime, xaml
Solution
Incorrect
public static readonly DependencyProperty TypeProperty =
DependencyProperty.RegisterAttached("Type", typeof(InputType), typeof(TextBox), new PropertyMetadata(default(InputType), OnTypeChanged));
Correct
public static readonly DependencyProperty TypeProperty =
DependencyProperty.RegisterAttached("Type", typeof(InputType), typeof(Input), new PropertyMetadata(default(InputType), OnTypeChanged));
Problem
I want to create custom text box with attached property for Windows Store app. I am following this solution. Now it uses hard coded value as property value but I want to set value using binding, but it's not working. I tried to search a lot but didn't helped me any solution. The exception details is like this An exception of type 'Windows.UI.Xaml.Markup.XamlParseException' occurred in CustomTextBox.exe but was not handled in user code WinRT information: Failed to assign to property 'CustomTextBox.Input.Type'. MainPage.xaml ``` <!-- local:Input.Type="Email" works --> <!-- local:Input.Type="{Binding SelectedTextboxInputType}" not working --> <TextBox x:Name="txt" local:Input.Type="{Binding SelectedTextboxInputType}" Height="30" Width="1000" /> <ComboBox x:Name="cmb" ItemsSource="{Binding TextboxInputTypeList}" SelectedItem="{Binding SelectedTextboxInputType}" Height="30" Width="200" Margin="451,211,715,527" /> ``` MainPage.xaml.cs ``` public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); DataContext = new ViewModel(); } } ``` Input.cs ``` //InputType is enum public static InputType GetType(DependencyObject obj) { return (InputType)obj.GetValue(TypeProperty); } public static void SetType(DependencyObject obj, InputType value) { obj.SetValue(TypeProperty, value); } public static readonly DependencyProperty TypeProperty = DependencyProperty.RegisterAttached("Type", typeof(InputType), typeof(TextBox), new PropertyMetadata(default(InputType), OnTypeChanged)); private static void OnTypeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (e.NewValue is InputType) { var textBox = (TextBox)d; var Type = (InputType)e.NewValue; if (Type == InputType.Email || Type == InputType.URL) { textBox.LostFocus += OnLostFocus; } else { textBox.TextChanged += OnTextChanged; } } } ``` ViewModel.cs ``` public class ViewModel : BindableBase { public ViewModel() { TextboxInputTypeList = Enum.GetValues(typeof(InputType)).Cast<InputType>(); } private InputType _SelectedTextboxInputType = InputType.Currency; public InputType SelectedTextboxInputType { get { return _SelectedTextboxInputType; } set { this.SetProperty(ref this._SelectedTextboxInputType, value); } } private IEnumerable<InputType> _TextboxInputTypeList; public IEnumerable<InputType> TextboxInputTypeList { get { return _TextboxInputTypeList; } set { this.SetProperty(ref this._TextboxInputTypeList, value); } } } ```