2013-08-06 14 views
5

Mam kontrolkę tabulacji z 3 obiektami, 2 listami i polem tekstowym. Pole tekstowe jest związany dwukierunkowy:Dwustronne wiązanie tekstowe nie wyzwala

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

obiekt Podłoże:

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

Problem jest, kiedy zmienić tekst i kliknij inną kartę to nie aktualizuje pole oporowe (nawet nie uderzyć seter), ale jeśli zmienię, kliknij pole listy, które robi ...

Jakiś powód tego dziwnego zachowania?

+0

ten może być również przyczyną nie punktu nieruchomości w OnPropertyChanged metody jak 'OnPropertyChanged („CurrentInput”) '. Zignoruj, jeśli już próbowałeś tego. –

Odpowiedz

3

To nie jest dziwne zachowanie i zostało zadane wiele razy wcześniej. Przeczytaj o Binding.UpdateSourceTrigger, zobacz także uwagi dotyczące wiązania.

+0

Zapraszam na moją ignorancję, ale "W przypadku użycia w scenariuszach wiązania danych ta właściwość używa domyślnego zachowania aktualizacji UpdateSourceTrigger.LostFocus." - kiedy klikam na inną zakładkę, czy to nie "Lose Focus", a zatem powinna wywołać aktualizację? – sprocket12

+1

@MuhammadA: Niekoniecznie, WPF ma zakresy ostrości, jeśli każda karta ma swój własny zakres, to "TextBox" nadal się skupia. Możliwe, że kontrola zostanie usunięta, zanim straci ostrość. –

+0

Tak i jest to bardziej skomplikowany problem niż to, co zostało zadane wiele razy. Dzięki za pomoc. – sprocket12

0

mam rozwiązać ten problem (TwoWay Binding) poprzez ręczne spuście silnik Databinding korzystając

DataContext = this; 
+1

witam, byłoby miło, gdybyś podał więcej kontekstu dla tej jedynej linii kodu. Pytanie ma solidny kontekst, jestem pewien, że jeśli rozwiążesz tę odpowiedź, pomożesz większej liczbie osób. – Sombriks

Powiązane problemy