这是我背后的代码:
Class MainWindow
Implements INotifyPropertyChanged
Private _importPath As String
Sub New()
InitializeComponent()
ImportPath = ConfigurationManager.AppSettings(AppSettingsKeys.ImportFileDir)
ImportPathBox.Text = ImportPath
End Sub
Public Property ImportPath As String
Get
Return _importPath
End Get
Set(value As String)
_importPath = value
OnMyPropertyChanged("ImportPath")
End Set
End Property
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Private Sub OnMyPropertyChanged(ByVal propertyName As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
End Sub
End Class
这是我的标记的相关部分,MainWindow
:
<TextBox Name="ImportPathBox" Text="{Binding Path=ImportPath}" Margin="110, 5, 30, 5" HorizontalAlignment="Stretch" Grid.Row="0"/>
尽管设置了ImportPath
一个保留的值,但ImportPathBox
仍为空白,并且对她所做的任何更改都不会传回ImportPath
。这似乎是琐碎的数据绑定,但我的WPF已经变得有点生锈了。
答案 0 :(得分:3)
我没有看到你为绑定设置DataContext
的位置,但假设已经完成问题就在这里
ImportPathBox.Text = ImportPath
通过这样做,您可以有效地将手动值强加到TextBox
。你不需要这条线。如果您未在任何地方设置DataContext
,那么您需要
Me.DataContext = Me
在你的构造函数
中答案 1 :(得分:2)
正如dkozl所说,你必须设置yor view的datacontext。我建议使用MVVM和一个ViewModelLocator,例如Galasoft MVVM Ligtht提供的,可以通过nuget ...或者你可以在ctor或xaml中偷工减料并声明它。
或如前所述的观点: Me.DataContext = this; //请使用vm代替
如果您希望文本框回发到vm属性,则需要双向绑定
<TextBox Name="ImportPathBox" Text="{Binding Path=ImportPath, Mode=TwoWay}".../>
请注意,默认的UpdateSourceTrigger设置为LostFocus,这意味着只有当tb失去焦点时才会从gui更新VM的属性。如果将其设置为PropertyChanged,则每次用户编辑tb时都会更新。
干杯