2013-08-06 76 views
5

我有一個帶3個對象,2個列表和一個文本框的選項卡控件。文本框綁定雙向:文本框雙向綁定不觸發

<TabControl x:Name="tcTabs" ItemsSource="{Binding Rooms, UpdateSourceTrigger=PropertyChanged}" Margin="5" BorderThickness="1" IsSynchronizedWithCurrentItem="True"> 
    <TabControl.ItemContainerStyle> 
     <Style TargetType="TabItem"> 
      <Setter Property="Header" Value="{Binding Name}" /> 
      <Setter Property="ContentTemplate"> 
       <Setter.Value> 
        <DataTemplate> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="*" /> 
           <ColumnDefinition Width="Auto"/> 
          </Grid.ColumnDefinitions> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="*"/> 
           <RowDefinition Height="22"/> 
          </Grid.RowDefinitions> 

          <ListBox ItemsSource="{Binding ReceivedMessages}" DisplayMemberPath="Raw" Grid.Row="0" Grid.Column="0" BorderThickness="0" /> 
          <ListBox ItemsSource="{Binding Users}" DisplayMemberPath="Nick" Visibility="{Binding Type, Converter={StaticResource UserListVisibilityConverter}}" Grid.Row="0" Grid.Column="1" BorderThickness="1,0,0,0" BorderBrush="#FFBBBBBB" Width="130" /> 
          <TextBox Text="{Binding CurrentInput, Mode="TwoWay"}" Grid.Row="1" Grid.ColumnSpan="2" BorderThickness="0,1,0,0" BorderBrush="#FFBBBBBB" Height="22" /> 
         </Grid> 
        </DataTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </TabControl.ItemContainerStyle> 
</TabControl> 

支持對象:

public string CurrentInput 
{ 
    get 
    { 
     return _currentInput; 
    } 
    set 
    { 
     if (value != _currentInput) 
     { 
      _currentInput = value; 
      OnPropertyChanged(); 
     } 
    } 
} 

問題是,當我改變文本,然後單擊另一個選項卡時不更新支持字段(甚至不打但是如果我改變,然後單擊它的列表框...

這種奇怪行爲的任何原因?

+0

這也可以是在像'OnPropertyChanged(「CurrentInput」)OnPropertyChanged方法不點的屬性的原因數據綁定引擎'。如果已經嘗試過,請忽略。 –

回答

3

這不是一個奇怪的行爲,並且之前已被多次詢問。閱讀關於Binding.UpdateSourceTrigger,也看到你綁定的the respective property的評論。

+0

我爲我的無知做了opologise,但「在數據綁定場景中使用時,此屬性使用UpdateSourceTrigger.LostFocus的默認更新行爲。」 - 當我點擊另一個標籤不是「失去焦點」,因此應該觸發更新? – sprocket12

+1

@MuhammadA:不一定,WPF有焦點範圍,如果每個標籤都有自己的範圍,那麼'TextBox'仍然是焦點。控件在失去焦點之前可能會被刪除。 –

+0

是的,那是比其他問題多次提出的更復雜的問題。謝謝你的幫助。 – sprocket12

0

我已經通過手動觸發解決這個問題(雙向綁定)使用

DataContext = this; 
+1

你好,如果你爲這個唯一的代碼行提供更多的上下文會很好。這個問題有一個堅實的背景,我相信如果你詳細說明這個答案,你會幫助更多的人。 – Sombriks