通过触发器从模板的父控件获取属性

时间:2012-02-14 14:44:07

标签: c# wpf xaml data-binding

我有下一个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>            

如何使用触发器当我更改languageComboBox中的选定项目时,我可以将每行中testTextBox中的文本更改为languageComboBox中的文本?

UPDATE:ATTANTION! ComboBox和TextBlock在不同的DataTemplates中,因此像

这样的标准解决方案
<TextBlock Text="{Binding ElementName=languageComboBox, Path=SelectedValue.Content}" Name="testTextBox" Margin="5,0" VerticalAlignment="Center"/>

Dosnot工作!

2 个答案:

答案 0 :(得分: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}}}" />

答案 1 :(得分:0)

你可以绑定它:

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