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

应该设置两种方式绑定到您需要显示的项目,在这种情况下是文本框。在这里,您需要将耦合回您的数据上下文。您可能需要考虑将UpdateSourceTrigger属性设置为PropertChanged. 这样,您将始终输入文本的值,即使没有失去焦点。

itemsource 不应该是双向的。一种方法可以做到,因为您可能会绑定到可观察的集合。这只会从您的数据上下文中设置一次。这将自动处理向您的收藏添加和删除项目。

我会像这样添加你的代码:

<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 属性是TwoWaydefault. 因此,它的构造不是必需的。

来自MSDN

在数据绑定场景中使用时,此属性使用UpdateSourceTrigger.LostFocus.

这意味着更新属性立即可见,您需要将属性设置UpdateSourceTriggerPropertyChanged

<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 回答