C# 双向绑定在WPF中不起作用
我有一个WPF应用程序,它有几个对话框和许多控件。我有一个下拉列表,它没有从C#绑定到XAML。另一种方法很好 这是C#: 我知道你在想什么,因为我也这么想。Clone()没有复制值或引发事件,但确实如此。我在克隆后直接编写了它来显式地设置这些值,但这仍然不起作用C# 双向绑定在WPF中不起作用,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,我有一个WPF应用程序,它有几个对话框和许多控件。我有一个下拉列表,它没有从C#绑定到XAML。另一种方法很好 这是C#: 我知道你在想什么,因为我也这么想。Clone()没有复制值或引发事件,但确实如此。我在克隆后直接编写了它来显式地设置这些值,但这仍然不起作用 M您可以尝试使用这个XAML(不要忘记声明您的数据): 在模型中而不是在UI中应用ValidationRules。搜索数据注释:P您可能在“SelectedValuePath”和“SelectedItem”之间存在冲突。您是否尝试
M您可以尝试使用这个XAML(不要忘记声明您的数据):
在模型中而不是在UI中应用ValidationRules。搜索数据注释:P您可能在“SelectedValuePath”和“SelectedItem”之间存在冲突。您是否尝试过删除“SelectedValuePath”?另一方面,您是否实际更改为列表中的某个项目?或者属性是否匹配?在输出窗口中是否看到任何绑定错误?您是否在
AllCategories
列表中设置categories
表单对象?如果我将这些对象删除到属性,我将在下拉列表中获得默认文本。我认为它们执行的是一个完全不同的功能,不是吗?在C#中发布代码“…更改我视图中Category的值”,我应该把代码放在哪里?无论我把它放在哪里,我都会收到错误。@serlingpa如果你使用UserControl,你就把UserControl放在那里,如果你使用Window,就把Window放在那里。:)
public class AdditionalCostView : ViewBase, IEquatable<AdditionalCostView>
{
// ..
public OfficeReferenceDataView Category
{
get { return _category; }
set
{
this._category = value;
this.OnPropertyChanged("Category");
}
}
// ..
}
<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>
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;
// ..
}
// ..
}
<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" />