2013-08-06 48 views
5

Tôi có một điều khiển tab với 3 đối tượng, 2 danh sách và một hộp văn bản. Hộp văn bản là ràng buộc hai cách:Hộp văn bản liên kết hai chiều không kích hoạt

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

đối tượng lưng:

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

Vấn đề là, khi tôi thay đổi các văn bản và nhấp vào tab khác nó không cập nhật các lĩnh vực sao lưu (thậm chí không nhấn setter), tuy nhiên nếu tôi thay đổi thì hãy nhấp vào hộp danh sách ...

Bất kỳ lý do nào cho hành vi kỳ quặc này?

+0

này cũng có thể là nguyên nhân của không điểm của tài sản trong phương pháp OnPropertyChanged như 'OnPropertyChanged ("CurrentInput") '. Vui lòng bỏ qua nếu đã thử điều này. –

Trả lời

3

Đó không phải là hành vi kỳ quặc và đã được hỏi nhiều lần trước đây. Đọc về Binding.UpdateSourceTrigger, cũng xem các nhận xét của the respective property bạn liên kết.

+0

Tôi opologise cho sự thiếu hiểu biết của tôi nhưng "Khi được sử dụng trong các kịch bản ràng buộc dữ liệu, tài sản này sử dụng hành vi cập nhật mặc định của UpdateSourceTrigger.LostFocus." - khi tôi nhấp vào một tab khác, nó không "mất tập trung" và do đó sẽ kích hoạt một bản cập nhật? – sprocket12

+1

@MuhammadA: Không nhất thiết, WPF có phạm vi tiêu điểm, nếu mỗi tab có phạm vi riêng thì hộp văn bản' vẫn tập trung. Cũng có thể điều khiển được loại bỏ trước khi nó có thể mất tập trung. –

+0

Có và đó là vấn đề phức tạp hơn bất cứ điều gì khác đã được hỏi nhiều lần. Cảm ơn bạn đã giúp đỡ. – sprocket12

0

Tôi đã giải quyết vấn đề này (TwoWay Binding) bằng cách thủ công kích hoạt động cơ databinding sử dụng

DataContext = this; 
+1

xin chào, sẽ rất tuyệt nếu bạn cung cấp thêm ngữ cảnh cho dòng mã duy nhất này. Câu hỏi có một bối cảnh vững chắc, tôi chắc chắn nếu bạn xây dựng câu trả lời này, bạn sẽ giúp đỡ nhiều người hơn. – Sombriks

Các vấn đề liên quan