我有一个绑定到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>
答案 0 :(得分:0)
会有正确的想法,事实上,这就是值列表所在的位置。事实证明,在我的问题中列出的所有内容都是正确的,我只是没有在适当的时间填充可能的值列表。当列表中有内容时,列表工作得更好!经过18年的努力,你会发现我已经知道了! ; - )