数据网格模板列的数据模板内另一个控件的数据绑定元素名称,并且转换器未触发

本文关键字:数据 转换器 数据绑定 网格 数据网 另一个 元素 控件 | 更新日期: 2023-09-27 18:19:41

<UserControl.Resources>
            <local:ColorConverter x:Key="cc"></local:ColorConverter>
</UserControl.Resources>
<sdk:DataGrid x:Name="gridAllContacts"  Grid.Row="1" Grid.Column="0" Width="500"                   Height="300"  AutoGenerateColumns="False">
      <sdk:DataGrid.Columns>
        <sdk:DataGridTemplateColumn Header="Name">
            <sdk:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                   <StackPanel>
                    <TextBox Text="{Binding Path=Name, Mode=TwoWay}" Background="{Binding ElementName=columns2, Path=SelectedIndex, Mode=TwoWay, Converter={StaticResource cc}}" ></TextBox>
                   </StackPanel>
                </DataTemplate>
           </sdk:DataGridTemplateColumn.CellTemplate>
        </sdk:DataGridTemplateColumn>
     </sdk:DataGrid.Columns>              
 </sdk:DataGrid>
 <ComboBox Name="columns2"  VerticalAlignment="Center" Height="25" HorizontalAlignment="Left" Margin="150,0,0,0" SelectedIndex="0">
    <ComboBoxItem>Name</ComboBoxItem>
    <ComboBoxItem>School</ComboBoxItem>
    <ComboBoxItem>ContactID</ComboBoxItem>
</ComboBox>

特定列的 datatemplate 内文本框的背景应根据所选的组合框项进行着色。但是现在,当我在转换器类中放置断点时,转换器根本没有触发。我在某处读到您需要一个 DataContextProxy,如果是这样,我该怎么做?

数据网格模板列的数据模板内另一个控件的数据绑定元素名称,并且转换器未触发

您可以尝试将组合框移动到用户控件的资源中(将名称更改为 x:Key(。

然后将原始组合框位置替换为内容演示器,其内容是资源中的组合框。

数据网格的绑定需要更改为 Background="{Binding Source={StaticResource comboBoxKeyInResources}", Path=SelectedIndex...

这样,转换器绑定应该可以工作。

我这样做

是正确的,它完全按照我想要的方式工作:

        DataGridCell tempCell = new DataGridCell();
        Style cellStyle = new Style();
        cellStyle.TargetType = tempCell.GetType();
        cellStyle.Setters.Add(new Setter(DataGridCell.ForegroundProperty, new SolidColorBrush(Colors.Red)));
        gridAllContacts.Columns[0].CellStyle = cellStyle;