2013-08-06 38 views
5

3 nesneden oluşan bir sekme denetimi, 2 liste ve bir metin kutusu var. metin kutusu bağlı olduğu iki yönlü:Metin kutusu iki yönlü ciltleme tetiklenmiyor

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

Taban nesnesi:

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

Sorun metni değiştirmek ve başka bir sekmeyi tıkladığınızda o arka alanını (hatta isabet etmez güncelleme etmez ise setter), ancak değiştirirseniz liste kutusunu tıklatın ...

Bu garip davranış için herhangi bir sebep var mı?

+0

kullanarak veri bağlama motoru Bu sorunu çözmek ettik '. Bunu zaten denediyse lütfen dikkate almayın. –

cevap

3

Bu garip bir davranış değildir ve daha önce defalarca sorulmuştur. Binding.UpdateSourceTrigger hakkında bilgi edinin, ayrıca bağlandığınız the respective property açıklamalarına bakın.

+0

Cehaletimden dolayı özür dilerim ancak "Veri bağlama senaryolarında kullanıldığında, bu özellik UpdateSourceTrigger.LostFocus'un varsayılan güncelleme davranışını kullanır." - Başka bir sekmeye tıkladığımda "Odaklanmaya" gerek yok ve bu nedenle bir güncellemeyi tetiklemeli mi? – sprocket12

+1

@MuhammadA: WPF'nin odak kapsamı yok, eğer her sekmenin kendi kapsamı varsa, o zaman 'TextBox' hala odaklanıyor. Odaklanmadan önce kontrolün kaldırılması da mümkündür. –

+0

Evet ve bu, birden çok kez sorulandan daha karmaşık bir sorundur. Yardım ettiğin için teşekkür ederim. – sprocket12

0

I, manuel tetik ile (iki-yollu bağlanması) Bu aynı zamanda 'OnPropertyChanged ("CurrentInput") gibi OnPropertyChanged yöntemde özelliği olmayan noktasının neden olabilir

DataContext = this; 
+1

merhaba, bu tek satırlık kod için daha fazla bağlam sağlarsanız iyi olur. Sorunun sağlam bir içeriği var, eminim ki bu cevabı detaylandırırsanız çok daha fazla insana yardım edersiniz. – Sombriks