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}"
/>
有两个问题。首先,它必须是一个属性(如果它是公共的,把前面的下划线去掉;按照惯例,下划线前缀表示"私有字段"):
public Classes.ModelInOutClasses.BlackOilFluidModel FluidBlackOilClass {
get; set;
}
其次,默认情况下,Binding
在DataContext
对象上查找指定的属性。据我所知,从你所说的,Window
的DataContext
是null
。ElementName
用于引用具有x:Name
属性的控件,这是一个UI控件。FluidBlackOilClass
不是那样的。还有(琐事时间!)在这种情况下不需要Mode
;控件的属性有一个默认值,TwoWay
是TextBox.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;}
根据您的需求调整解决方案