UWP简单数据绑定无法正常工作

时间:2016-07-18 21:15:39

标签: c# data-binding uwp

我一直在关注一些培训视频并使用UWP和C#创建一个简单的应用程序,并使用UWP数据绑定,不幸的是,将数据从文本框传递到类属性不起作用。什么都没发生。没有数据传递,也没有生成错误。

所以我的班级(一切都被剥离到相关代码)是

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

页面下是

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

在我的2个TextBoxes下我有

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

所以它就在那里。

如果我只是在代码隐藏中的按钮Click事件下调用它就可以了。数据传递,代码运行。

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

数据绑定何时启动?什么事件(如果有的话)丢失了?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

  

没有任何东西可以通过。但是将click事件发送到相同的属性,它会通过OK。

这是因为当您使用数据绑定时,您只需将数据模型指定为DataContext,其中可以找到TextBox的属性,您实际上并未将任何实际数据传递给TextBox。当您使用按钮单击事件时,您将创建此数据模型的实例“myChangeCalc”,并将实际数据(如“txtPaid.Text”)传递给此实例的属性“Amountpaid”。

  

silverfighter,你不必实现INotifyPropertyChanged(我知道什么我不能让它工作)说明说:当TextBox失去焦点时,TextBox.Text的更改被发送到双向绑定源,而不是每次用户按键后。

是的,但是此更改是从绑定目标到绑定源,如果要在此处从绑定源更改为绑定目标,则必须在源对象上实现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>

您可以在页面资源中创建数据模型的实例,并将此资源设置为Binding的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