2009-04-03 5 views
0

DataBindingを使用するとランタイムエラーが発生し、私は狂ってしまいます。私は定義したシンプルなUserControlを持っています。それをSillyControlと呼ぶことにしましょう。 SillyListBox.ItemsSource = myObjects;は、リストボックスには、なるようにXAMLで定義されています:UserControlにバインドするとManagedRuntimeErrorが発生します

だから、
<ListBox x:Name="SillyListBox"> 
<ListBox.ItemTemplate> 
    <DataTemplate> 
    <MyControls:SillyControl TestString="{Binding Name}" /> 
    </DataTemplate> 
</ListBox.ItemTemplate> 
</ListBox> 

、オブジェクトが追加されるたびにこれとは別に、私はコレクション

ObservableCollection<MyClass> myObjects; 

を介してこれのObservableCollectionにバインドされているSillyListBoxと呼ばれるリストボックスを持っていますコレクションmyObjectsに新しいSillyControlをListBoxに追加し、そのSillyControlのプロパティTestStringを、それが表すMyClassオブジェクトのNameプロパティにバインドする必要があります。

これは機能しません。それはうまくコンパイルされますが、プログラムを実行すると、System.Windows.Markup.XamlParseExceptionという厄介なランタイムエラーが発生し、その下にAG_E_PARSER_BAD_PROPERTY_VALUEという名前が付けられます。

ここで、単純にBindingを削除した場合、TestStringに固定値を指定します。たとえば、の場合、エラーは消えます。また、SillyControlの代わりにTextBlockコントロールを定義し、それにバインディングを使用することもできます。地球上でこれが起こるのは何ですか?

更新:要求されたとして、ここSillyControlが定義されている方法です。

public partial class SillyControl : UserControl 
{ 
    private string testString; 
    public string TestString 
    { 
     get { return testString; } 
     set { testString = value; } 
    } 

    public SillyControl() 
    { 
     InitializeComponent(); 
    } 
} 

XAMLは本当にベアボーンです。私はデフォルトのXAMLを使用しているので、それは空のGrid以上のものではありません。

更新2:私はvery simple test projectをダウンロードして問題を再現しました。

+0

SillyControlの詳細を知る必要があります。 XamlパーサーがコントロールのTestStringというプロパティを見つけられません。 – AnthonyWJones

+0

フィードバックいただきありがとうございます。私は質問を更新しました。 – JubJub

答えて

1

MyClassのはINotifyPropertyChangedのを実装する必要があります。http://weblogs.asp.net/joelvarty/archive/2008/11/17/silverlight-databinding-the-observable-collection.aspx

+0

私はそれが良いと思うが、そのインターフェースを実装しないとエラーになることに同意する。プロパティ値の変更がUIに反映されず、このエラーが発生しないことを意味します。 – AnthonyWJones

+0

このエラーが発生した場合、MyClassはINotifyPropertyを実装していました。また、INotifyPropertyを削除してテストしました。いいえ、どちらにも行けません。 – JubJub

1

はにバインドされているプロパティは、DependencyPropertyでなければならないことが判明。

関連する問題