为什么我的TextBox没有绑定?

时间:2014-09-20 18:21:06

标签: wpf vb.net data-binding

这是我背后的代码:

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已经变得有点生锈了。

2 个答案:

答案 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时都会更新。

干杯