xaml中的绑定错误

本文关键字:错误 绑定 xaml | 更新日期: 2023-09-27 18:17:18

我在代码中创建了一个类的实例,并将该类的一个名为"Name"的属性绑定到一个文本框,但绑定不起作用。你能帮我吗?背后的代码:

    public partial class BlackOilWindow : FluidsWindowClass
    {
        public Classes.ModelInOutClasses.BlackOilFluidModel _FluidBlackOilClass;
        public BlackOilWindow(Classes.ModelInOutClasses.BlackOilFluidModel inputBlackOilClass):base(inputBlackOilClass)
        {
            if (inputBlackOilClass == null)
            {
                inputBlackOilClass = new ModelInOutClasses.BlackOilFluidModel();
            }
            _FluidBlackOilClass = inputBlackOilClass;
            InitializeComponent();

        }
   }
Xaml:

<TextBox 
    HorizontalAlignment="Left" 
    Height="23" 
    Margin="73,7,0,0" 
    TextWrapping="Wrap"
    VerticalAlignment="Top" 
    Width="120" 
    Text="{Binding ElementName=_FluidBlackOilClass, Path=Name, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
    />

xaml中的绑定错误

有两个问题。首先,它必须是一个属性(如果它是公共的,把前面的下划线去掉;按照惯例,下划线前缀表示"私有字段"):

public Classes.ModelInOutClasses.BlackOilFluidModel FluidBlackOilClass {
    get; set;
}

其次,默认情况下,BindingDataContext对象上查找指定的属性。据我所知,从你所说的,WindowDataContextnullElementName用于引用具有x:Name属性的控件,这是一个UI控件。FluidBlackOilClass不是那样的。还有(琐事时间!)在这种情况下不需要Mode;控件的属性有一个默认值,TwoWayTextBox.Text的默认值。

所以无论FluidBlackOilClass是字段还是属性,你的绑定都不能工作。FluidBlackOilClass是窗口的属性。下面是如何绑定到窗口的属性(或者在这种情况下,一个属性属于窗口的属性——相同的区别,不同的Path):

<TextBox 
    HorizontalAlignment="Left" 
    Height="23" 
    Margin="73,7,0,0" 
    TextWrapping="Wrap"
    VerticalAlignment="Top" 
    Width="120" 
    Text="{Binding FluidBlackOilClass.Name, RelativeSource={RelativeSource AncestorType=Window}, UpdateSourceTrigger=PropertyChanged}"
    />    

你最好有一个适当的视图模型,实现INotifyPropertyChanged。您应该而不是Window上实现INotifyPropertyChanged,这是对该副本的接受答案所建议的。乍一看,这似乎很随意,但您很快就会发现这种分离使代码更容易处理。

您对类的成员使用了绑定。绑定只适用于属性。一个快速的更正应该是这样的:

 public Classes.ModelInOutClasses.BlackOilFluidModel _FluidBlackOilClass{get;set;}

根据您的需求调整解决方案