Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 双向绑定在WPF中不起作用_C#_Wpf_Xaml_Data Binding - Fatal编程技术网

C# 双向绑定在WPF中不起作用

C# 双向绑定在WPF中不起作用,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,我有一个WPF应用程序,它有几个对话框和许多控件。我有一个下拉列表,它没有从C#绑定到XAML。另一种方法很好 这是C#: 我知道你在想什么,因为我也这么想。Clone()没有复制值或引发事件,但确实如此。我在克隆后直接编写了它来显式地设置这些值,但这仍然不起作用 M您可以尝试使用这个XAML(不要忘记声明您的数据): 在模型中而不是在UI中应用ValidationRules。搜索数据注释:P您可能在“SelectedValuePath”和“SelectedItem”之间存在冲突。您是否尝试

我有一个WPF应用程序,它有几个对话框和许多控件。我有一个下拉列表,它没有从C#绑定到XAML。另一种方法很好

这是C#:

我知道你在想什么,因为我也这么想。Clone()没有复制值或引发事件,但确实如此。我在克隆后直接编写了它来显式地设置这些值,但这仍然不起作用


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" />