2

ListBox編集可能な DataTemplate が TextBox です。Binding TwoWay はどこに設定すればよいですか? ItemSource または TextBox バインディングで? もしかして両方で?そして、それは内部でどのように機能しますか?継承されますか?したがって、ItemSource で Binding を設定すると、TextBox で継承されますか?

<ListBox HorizontalAlignment="Left" ItemsSource="{Binding Commands, Mode=TwoWay}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBox Text="{Binding Name}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
4

2 に答える 2

3

表示する必要がある項目 (この場合は Textbox) に対して双方向バインディングを設定する必要があります。ここでは、データコンテキストに結合する必要があります。UpdateSourceTriggerプロパティを に設定することを検討してPropertChangedください。このようにして、フォーカスを失うことなく、常にテキストの値を入力できます。

itemsource は双方向であってはなりません。観察可能なコレクションにバインドする可能性が高いため、1つの方法で十分です。これは、データコンテキストから一度だけ設定されます。これにより、コレクションへのアイテムの追加と削除が自動的に処理されます。

次のようにコードを追加します。

<ListBox Margin="10,0,0,0" Width="200" HorizontalAlignment="Left"  ItemsSource="{Binding Commands}" >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
于 2014-03-27T07:38:09.063 に答える
1

Where should I set Binding TwoWay?

このモードを次のTextBoxように設定する必要があります。

<TextBox Text="{Binding Path=Name, Mode=TwoWay}" />

私が間違っていなければ、Text プロパティはTwoWayによってモードでリストされていますdefault。したがって、その構築は必要ありません。

からMSDN:

データ バインディングのシナリオで使用する場合、このプロパティは の既定の更新動作を使用しますUpdateSourceTrigger.LostFocus

これは、プロパティが一度に表示されるように更新されたことを意味します。プロパティを次のように設定する必要がありUpdateSourceTriggerますPropertyChanged

<TextBox Text="{Binding Path=Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

So if I set Binding in ItemSource - is it inherited in TextBox?

Bindingいいえ、依存関係プロパティごとに固有の設定のため、継承は行われません。を使用すると継承が発生しDataContextますが、ここでも各プロパティに固有の設定です。

于 2014-03-27T07:40:23.057 に答える