2013-08-06 22 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

を使用して手動トリガによって(双方向バインディング)データバインディングエンジンをこの問題を解決しました'。すでに試してみたら無視してください。 –

答えて

3

これは奇妙な動作ではなく、複数回前に尋ねられています。 Binding.UpdateSourceTriggerについて読む、the respective propertyの備考を参照してください。

+0

私の知る限りでは私は不快ですが、 "データバインディングシナリオで使用すると、このプロパティはUpdateSourceTrigger.LostFocusのデフォルトの更新動作を使用します。 - 別のタブをクリックすると「フォーカスを失う」ではないので、更新をトリガーする必要がありますか? – sprocket12

+1

@MuhammadA:WPFにはフォーカススコープがあります。すべてのタブに独自のスコープがあり、TextBoxにまだフォーカスがある場合は、フォーカススコープがあります。フォーカスを失う前にコントロールが削除されている可能性もあります。 –

+0

はい、これは他に何度も尋ねられたことよりも複雑な問題です。ご協力いただきありがとうございます。 – sprocket12

0

私はこれも `OnPropertyChangedを(「CurrentInput」)のようなOnPropertyChangedをメソッド内のプロパティのない箇所の原因である可能性があり

DataContext = this; 
+1

こんにちは、この唯一のコード行にもっと多くのコンテキストを提供すればよいでしょう。質問には堅実な文脈があります。私はあなたがこの答えを詳述すればもっと多くの人々を助けることができると確信しています。 – Sombriks

関連する問題