我有一个带有以下DataTemplate的 ListBox :
<DataTemplate x:Key="ItemTmp">
<Border Name="Border" BorderBrush="Aqua" BorderThickness="1" Padding="5" Margin="5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Path=Item1}"></TextBlock>
<TextBlock Grid.Column="1" Text="{Binding Path=Item2}"></TextBlock>
<TextBox Grid.Column="2" Text="{Binding Path=UpdatedGrade,UpdateSourceTrigger=LostFocus,Mode=TwoWay }" />
</Grid>
</Border>
</DataTemplate>
</UserControl.Resources>
意思是,我希望每次用户在文本框之一中写一些时,它将更新ViewModel-UpdatedGrade中的相同字段,问题是它不起作用。
当我仅将单个TextBox绑定(bind)到此字段时,它确实可以工作,例如:
TextBox Grid.Row="3" Text="{Binding Path=UpdatedGrade,UpdateSourceTrigger=LostFocus,Mode=TwoWay }"></TextBox>
有人知道我该怎么做吗?
最佳答案
ListBox项的DataContext是集合中单个项的,因此它试图查找该项的Property。
只要这不是Windows应用商店应用程序,就可以执行以下操作:
Text="{Binding Path=DataContext.UpdatedGrade, UpdateSourceTrigger=LostFocus, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl}}"
使用win8应用程序,您很难找到祖先,因此您必须提供包含上下文的元素的名称
Text="{Binding Path=DataContext.UpdatedGrade, UpdateSourceTrigger=LostFocus, Mode=TwoWay, ElementName=MyUserControl}"
我不确定这将如何操作-直接绑定(bind)到文本框-它可能会更新DataContext中的UpdatedGrade,但是同样,我不确定。
Text="{Binding Path=Text, UpdateSourceTrigger=LostFocus, Mode=TwoWay, ElementName=MyTextBox}"
关于c# - 如何将所有ListBox的项目绑定(bind)到同一属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24251506/