![](/img/trans.png)
[英]How to bind an element defined inside the control template for a custom control to a property defined in a subclass (of custom control class)
[英]How to bind to a control's property which is inside control template?
我想我的绑定DataGridTextColumn
“A-ID”到SelectedIndex
的ComboBox
里面的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.