2009-04-03 4 views
0

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.

+0

Wir müssen mehr über SillyControl wissen. Der Xaml-Parser findet keine Eigenschaft namens TestString auf dem Steuerelement. – AnthonyWJones

+0

Danke für die Rückmeldung. Ich habe die Frage aktualisiert. – JubJub

Antwort

1
+0

Ich stimme zu, das wäre gut, aber warum würde die Implementierung dieser Schnittstelle nicht zu dem Fehler führen. Es würde nur bedeuten, dass Änderungen, die am Eigenschaftswert vorgenommen wurden, nicht in die Benutzeroberfläche gelangen, aber es sollte nicht zu diesem Fehler führen. – AnthonyWJones

+0

MyClass implementierte INotifyProperty, als dieser Fehler auftrat. Ich habe auch getestet mit INotifyProperty entfernt. Nein, in die eine oder andere Richtung. – JubJub

1

Es stellte sich heraus, dass die Eigenschaft muss ein DependencyProperty zu gebunden zu sein sein.