2014-02-10 3 views
0

У меня есть ListView, которые имеют DataTemplate, как это:Связывание с нескольких объектов в одно значение в XAML

<DataTemplate x:Key="FilterDataTemplate"> 
<StackPanel Orientation="Horizontal" Background="White" Height="50" HorizontalAlignment="Left"> 
    <ComboBox x:Name="TermsItemComboBox" Width="160" 
     ItemsSource="{Binding ItemList}" Tag="{Binding}" 
     DisplayMemberPath="Key" SelectionChanged="AddTermsItem_SelectionChanged" 
     Background="#FFD1D1D1" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" /> 
    <TextBox x:Name="TermsInputTxt1" Text="{Binding FilterText, Mode=TwoWay}" 
     BorderBrush="#FF727272" Background="#FFD1D1D1" HorizontalAlignment="Left" 
     Width="200" FontSize="16" VerticalAlignment="Center" 
     Visibility="{Binding IsTxtForm, Converter={StaticResource BooleanToVisibilityConverter}}" 
     Height="45"/> 

    <TextBox x:Name="TermsInputTxt2" Text="{Binding FilterText, Mode=TwoWay}" 
     BorderBrush="#FF727272" Background="#FFD1D1D1" HorizontalAlignment="Left" 
     Width="200" FontSize="16" VerticalAlignment="Center" 
     Visibility="{Binding IsTxtForm, Converter={StaticResource BooleanToVisibilityConverter}}" 
     Height="45"/> 

    <Button x:Name="TrashBtn" HorizontalAlignment="Left" VerticalAlignment="Stretch" 
     BorderBrush="#FF575757" Foreground="#FF494949" BorderThickness="2" Tapped="TrashBtn_Tapped" 
     Style="{StaticResource DiscardAppBarButtonStyle}" Height="45" Width="55" 
     RenderTransformOrigin="0.5,0.5"> 
     <Button.RenderTransform> 
      <CompositeTransform ScaleX="-1" /> 
     </Button.RenderTransform> 
    </Button> 
</StackPanel> 

Это имеет выпадающий и два TextBox. По умолчанию функция combobox don's показывает что угодно, просто пустой элемент, я хочу, когда пользователь набирает текст в TermInputTxt1 или в TermInputTxt2, combobox выберет первый элемент.

Я пытаюсь связать выбранный индекс combobox с длиной этих двух текстовых полей с конвертером, но похоже, что XAML не поддерживает многопользовательскую привязку.

Любое предложение? Спасибо!

ответ

1

Итак, это немного сложная ситуация. У вас есть несколько способов сделать это:

  • свяжи TermsInputTxt1 и TermsInputTxt2 к ViewModel, с сеттер на ViewModel управлени ObservableCollection, добавление и удаление элементов, как они получают набор в собственность.
  • Создайте Model для каждой записи с полем значений (string) и привяжите Terms... к аксессуарам в ViewModel. Затем элементы ComboBox будут автоматически изменены.

Предлагаю сделать первый. Вы должны иметь свойство SelectedItem/SelectedIndex в ViewModel, к которому привязывается ComboBox. Вы также можете изменить метод, с помощью которого обновление привязки на TextBox s обновляется либо для немедленного обновления (много обработки), либо после потери фокуса (меньше обработки, но не будет немедленно обновлять интерфейс).

+0

Можем ли мы получить доступ к Условиям ввода-вывода1, терминуInputTxt2 и combobox из кода позади? Если да, я думаю, что это будет легче для этой ситуации. –

+0

Вы можете, но это сложно. Вам придется разбирать «VisualTree». Посмотрите [WinRTXamlToolkit] (http://winrtxamltoolkit.codeplex.com), так как у него есть некоторые полезные расширения для этого, такие как 'GetDescendends ()'. –

+0

Благодарим за предложение, я пытаюсь сделать первое решение, которое вы предлагаете, но я не могу привязать текстовое поле при вводе текста, это работает только при упущенном сосредоточении на текстовом поле, я развиваюсь с помощью среды WIndows 8, я не знаю Не видите ли UpdateSourceTrigger или что-то в этом роде? –

Смежные вопросы