2014-06-16 70 views
1

我有一個列表框具有以下的DataTemplate:如何將所有列表框的項目綁定到相同的屬性?

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

手段,我想的是,每次用戶在文本框人寫的東西,它會在視圖模型更新同一領域 - UpdatedGrade,問題是它不起作用。

當我只是一個單一的文本框綁定到這個領域,它的作品,例如:

TextBox Grid.Row="3" Text="{Binding Path=UpdatedGrade,UpdateSourceTrigger=LostFocus,Mode=TwoWay }"></TextBox> 

有沒有人有任何想法,我該怎麼辦呢?

回答

1

ListBox項目的DataContext屬於集合中的單個項目,所以它試圖找到該項目的Property。

只要這不是一個Windows應用商店的應用程序,你可以做這樣的事情:

Text="{Binding Path=DataContext.UpdatedGrade, UpdateSourceTrigger=LostFocus, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl}}" 

與Win8的應用程序,你找不到祖先那樣容易,所以你必須給名稱直接綁定到文本框 - - 它可能會在DataContext的更新UpdatedGrade,但同樣,我不知道包含上下文

Text="{Binding Path=DataContext.UpdatedGrade, UpdateSourceTrigger=LostFocus, Mode=TwoWay, ElementName=MyUserControl}" 

我不確定這會如何行動的元素。

Text="{Binding Path=Text, UpdateSourceTrigger=LostFocus, Mode=TwoWay, ElementName=MyTextBox}" 
+0

您的第一個解決方案,我從TwoWay更改爲OneWayToSource似乎很好解決它,感謝您的快速反應。 – slashms

相關問題