【问题标题】:binding error in xamlxaml 中的绑定错误
【发布时间】:2016-11-09 13:37:10
【问题描述】:

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

【问题讨论】:

标签: c# wpf xaml binding


【解决方案1】:

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

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

其次,默认情况下,BindingDataContext 对象上查找指定的属性。据我所知,WindowDataContextnullElementName 用于引用 control,这是一个 UI 控件,具有 x:Name 属性。 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 的适当视图模型。您应该按照the accepted answer to this duplicate 中的建议在Window 上实施INotifyPropertyChanged。起初这似乎是任意的,但您很快就会发现这种分离使您的代码更容易处理。

【讨论】:

    【解决方案2】:

    您对班级成员使用了绑定。绑定仅适用于属性。一个快速的修正是这样的:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      相关资源
      最近更新 更多