Ich bekomme einen Laufzeitfehler, wenn ich DataBinding verwende, und es macht mich verrückt. Ich habe ein einfaches UserControl, das ich definiert habe, nennen wir es SillyControl. Getrennt davon habe ich eine SammlungBindung an ein UserControl verursacht ManagedRuntimeError
ObservableCollection<MyClass> myObjects;
und eine ListBox genannt SillyListBox, die an diesem ObservableCollection über gebunden ist: SillyListBox.ItemsSource = myObjects;
Die List-Box wird in XAML definiert als so:
<ListBox x:Name="SillyListBox">
<ListBox.ItemTemplate>
<DataTemplate>
<MyControls:SillyControl TestString="{Binding Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Also, wenn ein Objekt hinzugefügt Zur Sammlung myObjects
sollte ein neues SillyControl zur ListBox hinzugefügt werden und die Eigenschaft TestString
dieses SillyControl sollte an die Name
Eigenschaft des MyClass
Objekts gebunden werden, das es repräsentiert.
Dies funktioniert nicht. Es kompiliert gut, aber wenn ich das Programm ausführe, gibt es mir einen unangenehmen Laufzeitfehler - System.Windows.Markup.XamlParseException und darunter etwas, das AG_E_PARSER_BAD_PROPERTY_VALUE sagt.
Jetzt, wenn ich einfach die Bindung entfernen, geben Sie TestString einen festen Wert, zum Beispiel der Fehler verschwindet. Es ist mir auch möglich, ein TextBlock-Steuerelement anstelle von SillyControl zu definieren und erfolgreich die Bindung zu verwenden. Was auf der Erde verursacht dies?
Update: Wie gewünscht, hier ist, wie SillyControl definiert:
public partial class SillyControl : UserControl
{
private string testString;
public string TestString
{
get { return testString; }
set { testString = value; }
}
public SillyControl()
{
InitializeComponent();
}
}
Das XAML ist wirklich Barebones. Ich benutze das Standard-XAML, also ist es nichts weiter als ein leeres Grid.
UPDATE 2: Ich habe eine very simple test project zum Download erstellt, die das Problem neu erstellt.
Wir müssen mehr über SillyControl wissen. Der Xaml-Parser findet keine Eigenschaft namens TestString auf dem Steuerelement. – AnthonyWJones
Danke für die Rückmeldung. Ich habe die Frage aktualisiert. – JubJub