我有一个带有以下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/

10-13 07:37