xaml中的绑定错误

时间:2016-11-09 13:37:10

标签: c# wpf xaml binding

我在代码中创建了一个类的实例,并将名为“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}"
    />

2 个答案:

答案 0 :(得分:1)

两个问题。首先,它必须是一个属性(并且如果它是公共的,则从前面强调下划线;按照惯例,下划线前缀表示“私有字段”):

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

其次,默认情况下,Binding会在DataContext对象上查找指定的属性。据我所说,Window的{​​{1}} DataContextnullElementName用于引用具有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}"
    />    

使用适当的viewmodel实现INotifyPropertyChanged会更好。您应该按照the accepted answer to this duplicate中的建议,在<{1}}上 实施INotifyPropertyChanged。这看起来似乎是随意的,但您很快就会发现分离使您的代码更容易处理。

答案 1 :(得分:0)

您在类的成员上使用了绑定。绑定仅适用于Properties。快速修正是这样的:

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

根据您的要求调整解决方案。