gpt4 book ai didi

wpf - 单击编辑 WPF 数据网格,组合框模板列

转载 作者:行者123 更新时间:2023-12-03 21:41:11 26 4
gpt4 key购买 nike

我有一个包含三列的网格:

  1. 友好名称
  2. 大陆名称
  3. 国家名称

第一列是可编辑的文本框列。第二列是一个显示大陆列表的组合框。第三列是一个组合框,显示基于第二列中所选大陆的国家/地区列表。我想为这些列实现单击。我尝试了此链接中给出的解决方案 Single click edit in WPF DataGrid

但这只适用于第一列,不适用于其他两列 (DataGridTemplateColumn)。

这怎么可能。请建议。下面给出了示例 XAML 和数据描述。

<DataGrid Grid.Row="1" VerticalAlignment="Top"
ItemsSource="{Binding Path=GeographyData,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource DataGridStyleNormal}">
<DataGrid.Columns>
<DataGridTextColumn Width="*" Header="Friendly name" Binding="{Binding Path=FriendlyName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
<!--FilterDef -->
<DataGridTemplateColumn Width="*"
Header="Continents">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox SelectedValue="{Binding ContinentId, Mode=TwoWay}"
SelectedValuePath="ID"
DisplayMemberPath="Name"
ItemsSource="{Binding Path=DataContext.ContinentsAndCountries,Mode=OneWay,UpdateSourceTrigger=PropertyChanged,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource ContinentCaptionConverter}">
<Binding Path="ContinentId"/>
<Binding Path="DataContext.ContinentsAndCountries" RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<!--Level-->
<DataGridTemplateColumn Width="*"
Header="Countries">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox SelectedValue="{Binding CountryId, Mode=TwoWay}"
SelectedValuePath="ID"
DisplayMemberPath="Name">
<ComboBox.ItemsSource>
<MultiBinding Converter="{StaticResource CountryValuesConverter}">
<Binding Path="DataContext.ContinentsAndCountries" RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}"/>
<Binding Path="ContinentId"/>
</MultiBinding>
</ComboBox.ItemsSource>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource CountryCaptionConverter}">
<Binding Path="DataContext.ContinentsAndCountries" RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}"/>
<Binding Path="ContinentId"/>
<Binding Path="CountryId"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>

注意:数据“ContinentsAndCountries”是主从数据的可观察集合。

  • 吉里加

最佳答案

我通过设置组合框加载事件来做到这一点

private void DataGridComboboxTemplate_Loaded(object sender, RoutedEventArgs e)
{
if (sender != null)
{
ComboBox cmb = sender as ComboBox;
cmb.IsDropDownOpen = true;
}
}

关于wpf - 单击编辑 WPF 数据网格,组合框模板列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10302173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com