datagridtemplatecolumn的datatemplate中的另一个控件的数据绑定元素名称,并且转换器未触发

时间:2012-01-08 17:04:21

标签: c# silverlight xaml data-binding datagrid

<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中文本框的背景应根据所选的ComboBox项进行着色。但是现在当我在转换器类中放置一个断点时,转换器根本不会触发。我在某处读到你需要一个DataContextProxy,如果是这样我该怎么做?

2 个答案:

答案 0 :(得分:0)

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

然后用ContentPresenter替换原始组合框位置,ContentPresenter的内容是资源中的组合框。

datagrid的绑定需要更改为Background =“{Binding Source = {StaticResource comboBoxKeyInResources}”,Path = SelectedIndex ...

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

答案 1 :(得分:0)

我做到了这一点,这完全按照我想要的方式运作:

        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;