我有一个WPF应用程序,其中包含多个带有大量控件的对话框。我有一个下拉列表,没有从C#绑定到XAML。另一种方式可以正常工作。
这是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>
AllCategories绑定工作正常,但SelectedItem绑定不正常。 ViewBase实现了INotifyPropertyChanged。
当我在C#中的视图中更改Category的值时,下拉列表没有任何反应。
我哪里错了?
更新
根据评论请求,这是我设置我的值的代码:
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()不是复制值或引发事件,但确实如此。我在克隆之后写了一下,以明确设置这些值,但仍然无法正常工作。
中号
答案 0 :(得分:0)
您可以尝试使用此XAML(不要忘记声明数据):
<UserControl.DataContext> <!--<Window.DataContext>-->
<data:AdditionalCostView />
</UserControl.DataContext> <!--</Window.DataContext>-->
<ComboBox Grid.Row="0" Grid.Column="1"
DisplayMemberPath="Value" SelectedValuePath="ID"
ItemsSource="{Binding AllCategories, Mode=TwoWay}" SelectedValue="{Binding Category.ID, Mode=TwoWay" />
在您的模型中应用您的ValidationRules而不是在您的UI中。搜索DataAnnotations:P