2012-02-14 2 views
1

У меня есть следующий код XAMLПолучить свойство от родительского контроля шаблона с помощью триггеров

<ComboBox Margin="5" Width="150" Name="languageComboBox"> 
    <ComboBoxItem Content="Russian" Tag ="1" IsSelected="True"/> 
    <ComboBoxItem Content="English" Tag="2"/> 
</ComboBox> 

<DataGrid Name="VulnersDatagrid" ItemsSource="{Binding ...}"> 
    <DataGrid.Columns> 
      <DataGridTemplateColumn Header="Заголовок" Width="*" CanUserSort="True" SortMemberPath="Vulner.DefaultDescription.Title"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
         <TextBlock Name="testTextBox" Margin="5,0" Text="My example Text" VerticalAlignment="Center"/> 
       </DataTemplate> 
      </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid>    

Как с помощью триггеров я могу изменить текст в testTextBox в каждой строке, чтобы текст из languageComboBox при изменении выбранного элемента в languageComboBox?

ОБНОВЛЕНИЕ: ОБСЛУЖИВАНИЕ! ComboBox и TextBlock в Diferent DataTemplates, так что стандартный раствор как

<TextBlock Text="{Binding ElementName=languageComboBox, Path=SelectedValue.Content}" Name="testTextBox" Margin="5,0" VerticalAlignment="Center"/> 

Dosnot работать!

+0

Привет, Сергей! Не совсем ответ, но почему бы не переместить всю логику в код-назад (в ViewModel, если вы используете MVVM)? Вы можете иметь свойства, содержащие коллекцию языков и выбранного языка, и связывать все, что вы хотите. Есть ли причина для борьбы с попыткой установить эту функциональность в XAML? – icebat

ответ

1

Вы правы, получил это работает, добавив свойство и привязка к предку (в моем случае окна).

Недвижимость в ViewModel:

public object SelectedValue 
    { 
     get { return _selectedValue; } 
     set 
     { 
      _selectedValue = value; 
      OnPropertyChanged("SelectedValue"); 
     } 
    } 
    private object _selectedValue; 

Переплет:

<TextBlock Text="{Binding Path=SelectedValue.Content, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" /> 
+0

Да, я нашел это решение раньше, но попрошу вас ответить. –

0

Вы можете связать его:

<TextBlock Text="{Binding ElementName=languageComboBox, Path=SelectedValue.Content}" Name="testTextBox" Margin="5,0" VerticalAlignment="Center"/> 
+0

Нет, это не работает, потому что TextBlock и ComboBox находятся в разных DataTemplates, и если я это сделаю - brogram не скомпилируется с ошибкой «не может найти languageComboBox». –