我有一个非常简单的表单,用于向datagrid添加项目。这是问题子,一个组合框,第一次有人点击按钮添加项目时工作,但后续点击不会返回所选值的任何值:
<ComboBox SelectedValuePath="Content" SelectedValue="{Binding Mode=TwoWay, NotifyOnValidationError=True, Path=NewResource.ResourceType, ValidatesOnExceptions=True}" Grid.Row="2" Grid.Column="1" Margin="0,10,0,0">
<ComboBoxItem Content="AV" />
<ComboBoxItem Content="Room Setup" /></ComboBox>
以下是视图模型中添加资源的代码:
if (NewResource.Name != string.Empty)
{
ProposalResource _pr = new ProposalResource()
{
CreatedBy = App.UserID,
CreatedOn = DateTime.Now,
ModifiedBy = App.UserID,
ModifiedOn = DateTime.Now,
Name = NewResource.Name,
ProposalID = CurrentProposal.ProposalID,
Quantity = NewResource.Quantity,
ResourceType = NewResource.ResourceType
};
CurrentProposal.ProposalResources.Add(_pr);
ctx.SubmitChanges();
NewResource.Name = "";
NewResource.Quantity = null;
NewResource.ResourceType = null;
RaisePropertyChange("NewResource");
}
我的问题是这适用于第一次插入。资源类型从组合框中获取,一切都很好。但后续单击不会返回任何选定的值。后续请求是否有理由不接受双向绑定?
答案 0 :(得分:1)
这是使用ComboBox内置的SL的已知错误,如果修改了基础ItemsSource,则SelectedValue绑定会被破坏。 (如果在非null值之后将SelectedValue设置为null,它也会中断。)
为此需要手工制作的解决方法,我首选的方法是使用ItemsSource和SelectedValue属性编写交互行为(请参阅例如here如何编写自己的),我绑定(或修改) )这些属性,我修改ComboBox的Items和SelectedItem属性代码,并在ComboBox的SelectionChanged事件上更改行为的选定值,而不是绑定它。