带有组合框的WPF数据网格绑定到每行的不同值列表

时间:2015-04-20 18:01:38

标签: wpf xaml mvvm datagrid combobox

我有一个绑定到EmployeeDeductionViewModel的WPF用户控件,其中DataGrid绑定到状态税参数的ObservableCollection:

public ObservableCollection<Models.StateTaxParmModel> StateTaxSettings
{
    get { return _stateTaxSettings; }
    set
    {
        if (_stateTaxSettings != value)
        {
            _stateTaxSettings = value;
            OnPropertyChanged();                    
        }
    }
} 

这是数据网格上的绑定(缩短以便于阅读):

<DataGrid ItemsSource="{Binding Path=StateTaxSettings}" SelectedItem="{Binding Path=StateTaxSetting, Mode=TwoWay}"...

每个StateTaxParamModel内部是ComboBox需要绑定到的可能值的列表:

public ObservableCollection<ParamValue> Values 
{
    get { return _values; }
    set
    {
        if (_values != value)
        {
            _values = value;
            OnPropertyChanged();                    
        }
    }
}

ParamValue类非常简单:

public class ParamValue
{
    public int ValueID { get; set; }
    public string ValueText { get; set; }
}

但是,可能的值列表(ParamValue列表)因每行而异。这就是问题所在。我可以在DataGrid中绑定一个ComboBox,只要该列表是UserControl DataContext的一部分,但由于列表随每一行而变化,我无法将其绑定到主DataContext,我必须将它绑定到ObservableCollection值(ParamValue列表)对每行唯一。谁能帮助我了解这是如何实现的?

这是我的DataGridTemplateColumn,我试图绑定到该行:

    <DataGridTemplateColumn Header="Value" MinWidth="60">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=Value, Mode=OneWay}" ToolTip="The value of the state tax parameter for the employee."/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <ComboBox ItemsSource="{Binding Path=Values, Mode=OneWay}" DisplayMemberPath="ValueText" SelectedValuePath="ValueText" SelectedValue="{Binding Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

1 个答案:

答案 0 :(得分:0)

会有正确的想法,事实上,这就是值列表所在的位置。事实证明,在我的问题中列出的所有内容都是正确的,我只是没有在适当的时间填充可能的值列表。当列表中有内容时,列表工作得更好!经过18年的努力,你会发现我已经知道了! ; - )