Wpf 将多个列表绑定到特定的datagridcombobox列
我有一个有两列的数据网格 一个是DataGridText 第二个是DataGridComboBox 当我加载数据时,两列都会被归档,但是当我单击第二列时,我希望有一个组合框,可以从第二个列表中加载数据 清单是这样的 public ObservableCollection PriorityRuleList{get;set;}=new ObservableCollection() .XAML文件如下所示:Wpf 将多个列表绑定到特定的datagridcombobox列,wpf,list,xaml,binding,datagridcomboboxcolumn,Wpf,List,Xaml,Binding,Datagridcomboboxcolumn,我有一个有两列的数据网格 一个是DataGridText 第二个是DataGridComboBox 当我加载数据时,两列都会被归档,但是当我单击第二列时,我希望有一个组合框,可以从第二个列表中加载数据 清单是这样的 public ObservableCollection PriorityRuleList{get;set;}=new ObservableCollection() .XAML文件如下所示: public class PriorityRule { public Priority
public class PriorityRule
{
public PriorityRule(RecipientSource recipientSource)
{
RuleType = recipientSource.Name;
Priority = recipientSource.Priority;
}
public PriorityRule() { }
public string RuleType { get; set; }
public int Priority { get; set; }
public RecipientSource RecipientSource { get; set; }
}
<DataGrid
x:Name="PriorityRulesGrid"
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
AutoGenerateColumns="false"
CanUserAddRows="False"
GridLinesVisibility="All"
HorizontalScrollBarVisibility="Auto"
IsReadOnly="False"
RowHeight="32"
VerticalScrollBarVisibility="Auto"
HorizontalContentAlignment="Stretch"
ItemsSource="{Binding PriorityRuleList}"
ColumnWidth="*" >
<DataGrid.Columns>
<DataGridTextColumn Header="{texts:VRI Rule type}"
Binding="{Binding RuleType}"
IsReadOnly="True"
Width="*"/>
<DataGridComboBoxColumn Header="{texts:VRI Priority}"
Width="*"
SelectedValuePath="Priority"
SelectedValueBinding="{Binding Priority}"
DisplayMemberPath="Priority">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding Path=DataContext.PriorityRuleList, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Path=DataContext.RulePriorityDefaultList, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
我的问题是:
单击第二列中的组合框时,应如何加载第二个列表。第一个列表是在窗口出现时加载的,所以可以,但是我需要从一个组合框中选择优先级,所以我不能加载第二个列表(int类型),以便从中进行选择
谢谢大家! 看起来您正试图将两种不同类型的源分配给
DataGridComboxColumn.ItemSource
。保持两个源正常,但确保属性优先级
存在。否则,对SelectedValuePath
和DisplayMemberPath
的评估将失败
创建具有属性优先级的类PriorityX
public class PriorityX
{
public int Priority { get; set; }
}
// assing your default values into this collection
public ObservableCollection<PriorityX> RulePriorityDefaultList { get; set; } = new ObservableCollection<PriorityX>();
公共类优先级
{
公共int优先级{get;set;}
}
//将默认值分配到此集合中
公共ObservableCollection规则PriorityDefaultList{get;set;}=new ObservableCollection();
在XAML中
<Window.Resources>
<!--load RulePriorityDefaultList as a static resource-->
<CollectionViewSource x:Key="RulePriorityDefaultList" Source="{Binding RulePriorityDefaultList}" />
</Window.Resources>
<Grid>
<DataGrid
x:Name="PriorityRulesGrid"
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
AutoGenerateColumns="false"
CanUserAddRows="False"
GridLinesVisibility="All"
HorizontalScrollBarVisibility="Auto"
IsReadOnly="False"
RowHeight="32"
VerticalScrollBarVisibility="Auto"
HorizontalContentAlignment="Stretch"
ItemsSource="{Binding PriorityRuleList}"
ColumnWidth="*">
<DataGrid.Columns>
<DataGridTextColumn Header="Rule type"
Binding="{Binding RuleType}"
IsReadOnly="True"
Width="*" />
<DataGridComboBoxColumn Header="Priority"
Width="*"
SelectedValuePath="Priority"
SelectedValueBinding="{Binding Priority}"
DisplayMemberPath="Priority"
ItemsSource="{Binding Source={StaticResource RulePriorityDefaultList }}">
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
您也可以使用现有的类
//assing your default values into this collection
public ObservableCollection<PriorityRule> RulePriorityDefaultList { get; set; } = new ObservableCollection<PriorityRule>();
//将默认值分配到此集合中
公共ObservableCollection规则PriorityDefaultList{get;set;}=new ObservableCollection();
@Ștefan Blaga,这个建议对你有帮助吗?没有,我甚至都没有让它编译。DataGridComboxColumn没有ItemsSource属性。我不能给RulePriorityDefaultList分配默认值,因为我使用这个列表在gridRefer中加载数据。对不起,我错过了代码中句子的结尾。如果我像上面那样做,数据将不会被加载。然后我需要创建带有优先级的默认列表
//assing your default values into this collection
public ObservableCollection<PriorityRule> RulePriorityDefaultList { get; set; } = new ObservableCollection<PriorityRule>();