2016-07-18 2 views
-1

저는 훈련 용 비디오를 따라 왔으며 UWP 및 C#으로 간단한 응용 프로그램을 만들었습니다. UWP Databinding을 사용하여 불행히도 텍스트 상자의 데이터를 클래스 속성에 전달하는 것만으로는 작동하지 않습니다. 아무 반응이 없습니다. 데이터가 전달되지 않고 오류가 생성되지 않습니다.UWP 간단한 데이터 바인딩이 작동하지 않습니다.

그래서 내 클래스 (모든 관련 코드 제거는) 내가 그래서 모두가

<TextBox 
      x:FieldModifier="public" 
      Text="{Binding Amountpaid, Mode=TwoWay}" 
      TextWrapping="Wrap" /> 

이 페이지에서

public class ChangeCalc 
{ 
    public string GoodsCost { get; set; } 
    public string Amountpaid { get; set; } 

제 2 텍스트 상자에서

<Page.DataContext> 
    <local:ChangeCalc /> 
</Page.DataContext> 

입니다 .

코드 숨김 버튼 이벤트 아래에서 호출하면 정상적으로 작동합니다. 데이터 전달, 코드 실행

myChangeCalc.GoodsCost = txtCost.Text; 
    myChangeCalc.Amountpaid = txtPaid.Text; 

언제 데이터 바인딩이 시작 되었습니까? 어떤 이벤트가 있다면 무엇입니까?

도움 주셔서 감사합니다.

+1

데이터 바인딩이 작동하지 않는다는 것을 어떻게 알 수 있습니까? –

+2

INotifyPropertyChanged를 구현 했습니까? – silverfighter

+1

대부분의 질문은 "나는 속성 변경 알림을 구현하지 못했습니다."라는 메시지가 쏟아져 나오는 많은 Stack Overflow에 대한 질문입니다. 그러나 좋은 [mcve]가 없다면 문제가 무엇인지 확실히 알 수 없습니다. 도움이 필요하면 질문을 개선하십시오. –

답변

0

아무 것도 전달되지 않습니다. 아직 같은 속성에 대한 click 이벤트가 있으면 OK가됩니다. 당신은 데이터 바인딩을 사용할 때 속성이 TextBox에 찾을 수있는, 당신이 실제로 TextBox에 실제 데이터를 전달하지 않았다, 당신은 단지 DataContext 같은 데이터 모델을 제공하기 때문에

입니다. 그리고 버튼 클릭 이벤트를 사용하면이 데이터 모델의 인스턴스 "myChangeCalc"를 만들고이 인스턴스의 "Amountpaid"속성에 "txtPaid.Text"와 같은 실제 데이터를 전달합니다.

silverfighter, 당신은에서 INotifyPropertyChanged를 구현하지 않아도 (내가 내가이 동작하지 않습니다 알고) 지침은 말한다 : TextBox.Text에 대한 변경 사항이 양방향 바인딩 소스로 전송 될 때 TextBox는 모든 사용자가 키 입력 한 후에 포커스를 잃지 않습니다.

네,하지만이 변화는 당신이 여기 바인딩 대상 바인딩 소스에서 변경하려는 경우 소스가 이벤트를 통해 변경 사항을보고 할 수 있도록, 당신은 소스 객체에 INotifyPropertyChanged 인터페이스를 구현해야합니다, 바인딩 소스에 대상 바인딩에서입니다 바인딩 엔진이 수신 대기합니다.

그래서, 여기에 예를 들어 :

<Page.Resources> 
    <local:ChangeCals x:Name="ccData" Amountpaid="111" /> 
</Page.Resources> 

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" DataContext="{StaticResource ccData}"> 
    <TextBox 
     x:FieldModifier="public" 
     Text="{Binding Amountpaid, Mode=TwoWay}" 
     TextWrapping="Wrap" Height="50" /> 
</Grid> 

당신은 페이지 자원 데이터 모델의 인스턴스를 생성하고 바인딩의 DataContext 등이 자원을 설정할 수 있습니다.

또 다른 예 : 뒤에

<TextBox 
    x:FieldModifier="public" 
    Text="{Binding Amountpaid, Mode=TwoWay}" 
    TextWrapping="Wrap" /> 

코드 :

public MainPage() 
{ 
    this.InitializeComponent(); 
    this.DataContext = myChangeCalc; 
} 

public ChangeCals myChangeCalc = new ChangeCals { Amountpaid = "111", GoodsCost = "222" }; 

어떤 방법, 바인딩 소스 데이터 모델 (ChangeCals 클래스)의 인스턴스이어야한다.여기에서 {Binding}을 사용 했으므로 {x : Bind} 사용 예제를 표시하지 않았습니다. {x : Bind}에 대해 자세히 알아 보려면 {x:Bind} markup extension을 참조하십시오. 바인딩 및 x : Bind에 대한 자세한 내용은 Data binding in depth을 참조하십시오.

관련 문제