2012-06-21 3 views
2

wpf vb.net 프로젝트를 만들었으며 간단한 데이터 베킹을 설정하려고합니다. 나는 DataContext = this를 설정하는 방법에 대해 조용하지 않다. 코드 바인드에서. 현재 프로그램을 실행할 때 Label이 업데이트되지 않습니다. 나는 아래에 나의 코드를 포함시켰다. 내가 뭘 놓치고있어?Wpf의 텍스트 상자에 속성을 데이터 바인딩하는 방법

<Window x:Class="MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Label Content="{Binding person.Name}"/> 
    </Grid> 
</Window> 

Class MainWindow 
    Private Property person As New Person() 

    Public Sub New() 

     ' This call is required by the designer. 
     InitializeComponent() 

     ' Add any initialization after the InitializeComponent() call. 
     person.Name = "Poco" 
    End Sub 
End Class 

System.ComponentModel 

Public Class Person 
    Implements INotifyPropertyChanged 

    Private _name As String 
    Public Property Name() As String 
     Get 
      Return _name 
     End Get 
     Set(ByVal value As String) 
      _name = value 

      OnPropertyChanged(New PropertyChangedEventArgs("Name")) 
     End Set 
    End Property 

    Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged 

    Public Sub OnPropertyChanged(ByVal e As PropertyChangedEventArgs) 
     If Not PropertyChangedEvent Is Nothing Then 
      RaiseEvent PropertyChanged(Me, e) 
     End If 
    End Sub 
End Class 

답변

3

이 가까이 - 당신은 (당신이 뒤에있는 코드에서 참조 할 수 있도록)가 XAML에서 레이블의 이름을 지정하고 다음 바인딩하고자하는 데이터에 바인딩 된 객체 내에 경로를 지정해야합니다.

<Label Name="MyLabel" Content="{Binding Path = Name}"/> 

다음 코드는 객체 당신에게 라벨의 DataContext을 설정해야합니다 :이 경우 그 내용이이 레이블 텍스트에 할당하고 싶은 Name 속성 객체를 결합한다 그것은이 경우에 특정 인스턴스, 클래스 PersonsomePerson을 구속하고 싶습니다 :

Private somePerson As New Person 

Public Sub New() 
    InitializeComponent() 
    MyLabel.DataContext = somePerson 
    somePerson.Name = "Poco" 
End Sub 
J는 .. 내가 좀 더 내 코드에 대해 생각하고 내가 필요로 한 모든 내 DataContext를 설정하는 것이 었습니다
+0

감사합니다 사람에게. 너처럼 모델을 볼 수도있어. 이렇게하면 내 컨트롤의 이름을 지정하지 않아도됩니다. 나는 당신의 응답을 appriciate. – poco

+0

@poco - DataContext 클래스를'person'으로 설정하는 것은 다소 효과가 있지만 접근 방법이 제한적입니다. 그것은 당신의 수업에서 모든 바인딩이 '사람'을 바라 볼 것임을 의미합니다. 당신은 정말로'person'이 당신의 전체 클래스를위한 DataContext가되도록하고 싶지는 않습니다. 단지 특정 레이블을 위해서입니다. 클래스의 다른 부분은 다른 데이터 컨텍스트를 원할 수 있습니다. 당신이하고있는 일에 따라 달라질 수 있습니다. –

관련 문제