我有一个带有以下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 ,问题是它没有& #39; t work。
当我将单个TextBox绑定到此字段时,它确实有效,例如:
TextBox Grid.Row="3" Text="{Binding Path=UpdatedGrade,UpdateSourceTrigger=LostFocus,Mode=TwoWay }"></TextBox>
有谁知道我该怎么做?
答案 0 :(得分:1)
ListBox项的DataContext是集合中的单个项,因此它正在尝试查找该项的属性。
只要这不是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}"
我不确定这会如何行动 - 直接绑定到文本框 - 它可能会更新DataContext中的UpdatedGrade,但是我再次确定。
Text="{Binding Path=Text, UpdateSourceTrigger=LostFocus, Mode=TwoWay, ElementName=MyTextBox}"