0

TextBox を文字列にバインドする際に問題が発生しています (StringBuilder でも同じ問題です)。

xaml は次のとおりです。

<ListBox x:Name="MyList" ItemsSource="{Binding ListOfBullets, Mode=TwoWay, Converter=StaticResourcedebugConverter}}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                            <local:TaskStepControl Text="{Binding  Mode=TwoWay}" AddHnadler="{Binding DelegateForHandlingAddTaskStep, ElementName=uc}"></local:TaskStepControl>                          
                    </DataTemplate>
                </ListBox.ItemTemplate>

ListBox の項目は次のとおりです。

public ObservableCollection<StringBuilder> ListOfBullets{get{....} set{....}}

私も試しました:

public ObservableCollection<string> ListOfBullets{get{....} set{....}}

アプリを実行すると、「パラメーターが正しくありません。」という例外が発生し、停止されません。

私は何を間違っていますか?

4

1 に答える 1

1

MSDN によると、空のプロパティ パスを使用して双方向バインディングを行うことはできません。

バインディング エンジンは、オブジェクト自体ではなく、特定のプロパティに対してのみ双方向バインディングを実行できると思います。

許可されない理由についての私の考え:

簡単にするために、TwoWay バインディングの「書き込み」部分は、提供された値をデータ ソース オブジェクトに設定するだけであると考えることができます。したがって、このマークアップText={Binding Name, Mode=TwoWay} は、テキスト更新に関する C# コードに似ていdataSource.Name = textBox.Textます (もちろん、バインディング ワークフロー全体ははるかに洗練されており、舞台裏で他のことを行っていますが、それは今は問題ではありません)。

あなたのサンプルは、あなたのListOfBulletslistItem = textBox.Textの実際のアイテムを更新しないようなことをしようとします。何が起こっているのかを理解してもらうために、バインディングの動作を大幅に単純化したことに注意してください。

できること:

文字列値を含み、バインドするラッパーモデルクラスを作成します。

public ObservableCollection<Model> ListOfBullets {get; set;}

<local:TaskStepControl Text={Binding Value, Mode=TwoWay} />

于 2012-05-05T12:27:02.053 に答える