我有一个ListBox
,其中DataTemplate是可以编辑的TextBox。我应该在哪里设置Binding TwoWay?在ItemSource或In TextBox绑定?也许在两者?它是如何在里面工作的?它是继承的吗?所以,如果我在ItemSource中设置Binding - 它是否在TextBox中继承?
<ListBox HorizontalAlignment="Left" ItemsSource="{Binding Commands, Mode=TwoWay}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 0 :(得分:1)
双向绑定应设置为您需要显示的项目,在本例中为文本框。在这里,您需要将耦合返回到您的datacontext。您可能需要考虑将UpdateSourceTrigger
属性设置为PropertChanged
。
这样,即使不失去焦点,也始终输入文本的值。
itemsource不应该是双向的。一种方法可以做,因为你可能会绑定到一个可观察的集合。这只会从您的datacontext设置一次。这将自动处理向您的收藏中添加和删除项目。
我会像这样添加你的代码:
<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>
答案 1 :(得分:1)
Where should I set Binding TwoWay?
您应该将此模式设置为TextBox
,如下所示:
<TextBox Text="{Binding Path=Name, Mode=TwoWay}" />
如果我没有弄错,则default
列出了TwoWay
模式的Text属性。因此,不需要它的构造。
来自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
时会发生继承,但同样,每个属性的设置都是唯一的。