繁体   English   中英

如何绑定到控件模板内部的控件属性?

[英]How to bind to a control's property which is inside control template?

我想我的绑定DataGridTextColumn “A-ID”到SelectedIndexComboBox里面的ContentTemplate DataGridTemplateColumn

这是我的XAML:

<DataGridTemplateColumn Header="Action" Width="*" x:Name="comboTemp">
    <DataGridTemplateColumn.CellStyle>
        <Style TargetType="{x:Type DataGridCell}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding V}" Value="t">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate>

                                <ComboBox x:Name="ActionCombo" ItemsSource="{Binding}" 
                                    IsTextSearchEnabled="True" SelectedIndex="{Binding ActionId}"
                                    IsEditable="False" Text="Select Action" DisplayMemberPath="Actions" 
                                    SelectedValuePath="ID" Style="{StaticResource combostyle}">
                                </ComboBox>

                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate>
                        <Grid  >
                            <Label Content="Added" Width="60" HorizontalAlignment="Left"/>
                            <Button Click="DeleteRow_Button" Height="22" Width="20" 
                                    HorizontalAlignment="Right" ToolTip="Delete">
                                <Button.Template>
                                    <ControlTemplate>
                                        <Image Source="Assets/gtk_close.png"/>
                                    </ControlTemplate>
                                </Button.Template>
                            </Button>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </DataGridTemplateColumn.CellStyle>
</DataGridTemplateColumn>
<DataGridTextColumn x:Name="ActionRecord" Header="A-ID" Binding="{Binding ???}" />

我像这样尝试了RelativeSource

<DataGridTextColumn x:Name="ActionRecord" 
    Binding="{Binding RelativeSource={RelativeSource AncestorType=ComboBox}, Path=SelectedIndex}" Header="A-ID" />

然后,我尝试将其与ComboBox的SelectionChanged事件中的代码绑定在一起:

int Comboindex = combo.SelectedIndex;
ActionRecord.Binding = new Binding() { Source = Comboindex  };

它有效,但该值显示在所有行上。 我只希望在选定的行上。

我该怎么办?

下面的代码将为您做到,我已经检查了它。

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ComboBox cmb = (ComboBox)sender;
    DataGridRow row = (DataGridRow)MyDataGrid.ItemContainerGenerator.ContainerFromItem(cmb.DataContext);
    ((TextBlock)MyDataGrid.Columns[0].GetCellContent(row)).Text = cmb.SelectedIndex.ToString();
}

并且如果您具有与DataGridTextColumn对应的属性(例如Index),并且已经实现了INotifyPropertyChanged ,则

 private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ComboBox cmb = (ComboBox)sender;            

            Employee emp = (Employee)cmb.DataContext;
            emp.Index = cmb.SelectedIndex.ToString();            
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM