我有一个WPF应用程序,有很多控件的对话框。我有一个没有从C#绑定到XAML的下拉列表。另一种方式工作正常。双向绑定不能在WPF中工作
这里是C#:
public class AdditionalCostView : ViewBase, IEquatable<AdditionalCostView>
{
// ..
public OfficeReferenceDataView Category
{
get { return _category; }
set
{
this._category = value;
this.OnPropertyChanged("Category");
}
}
// ..
}
,这里是相应的XAML:
<ComboBox Grid.Row="0" Grid.Column="1" Validation.Error="Validation_Error"
DisplayMemberPath="Value" SelectedValuePath="ID"
ItemsSource="{Binding AllCategories}">
<ComboBox.SelectedItem>
<Binding Path="Category" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
<Binding.NotifyOnValidationError>
<sys:Boolean>true</sys:Boolean>
</Binding.NotifyOnValidationError>
<Binding.NotifyOnSourceUpdated>
<sys:Boolean>true</sys:Boolean>
</Binding.NotifyOnSourceUpdated>
<Binding.NotifyOnTargetUpdated>
<sys:Boolean>true</sys:Boolean>
</Binding.NotifyOnTargetUpdated>
<Binding.ValidationRules>
<validators:MandatoryValueValidationRule IsRequired="True" Message="Please select a category."></validators:MandatoryValueValidationRule>
</Binding.ValidationRules>
</Binding>
</ComboBox.SelectedItem>
</ComboBox>
结合工作正常,但结合的SelectedItem的AllCategories是没有的。 ViewBase实现INotifyPropertyChanged。
当我在C#中的视图中更改类别的值时,下拉列表中没有任何反应。
我哪里错了?
UPDATE
按要求评论,这里是我把我的值的代码:
private void ctlBooking_PricesAndFees_AdditionalCostEditing(object sender, RoutedEventArgs e)
{
try
{
AdditionalCostEventArgs args = e as AdditionalCostEventArgs;
AdditionalCostView costToEdit = args.AdditionalCost;
AdditionalCostView tempCost = args.AdditionalCost.Clone() as AdditionalCostView;
// ..
}
// ..
}
我知道你在想什么,因为我认为同样的事情。 Clone()不是复制值或引发事件,但它是。我在克隆之后慢慢写了它来显式设置这些值,但仍然无效。
中号
您可能在“SelectedValuePath”和“SelectedItem”之间存在冲突。你有没有尝试删除“SelectedValuePath”? – BradleyDotNET 2015-01-15 18:35:29
另一方面,你是否真的*变成列表中的一个项目?或者这些属性匹配? – BradleyDotNET 2015-01-15 18:36:08
您是否在输出窗口中看到任何绑定错误?你在'AllCategories'列表中设置了Category Category表单对象吗? – 2015-01-15 18:38:06