【问题标题】:Simple Binding of Data from code behind to XAML将代码中的数据简单绑定到 XAML
【发布时间】:2009-11-06 11:41:17
【问题描述】:


我是 WPF 概念的新手。我只想在文本框中显示一个字符串。我尝试使用以下 C# 代码和 XAML 将字符串绑定到 TextBox.Text 属性。 C#代码:

public partial class Window1 : Window
{
    public int TmpVal;
    public string TmpStr;

     public Window1()
    {
        TmpVal = 50;
        TmpStr = "Windows Created";
        InitializeComponent();
        this.DataContext = this;
    }
    private void viewButton_Click(object sender, RoutedEventArgs args)
    {
        TmpStr = "Button clicked";
    }
}

}

XAML:

 <Window x:Class="TestWPF.Window1"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="600" Width="800" x:Name="ThisWindow">
<Grid>
    <TextBox Name="txtTest1" Margin="200,0,200,200" HorizontalAlignment="Left" Height="50" Width="200" Text="{Binding TmpStr, ElementName=ThisWindow}" />
    <Button Name="butTest1"  Click="viewButton_Click">Test123</Button>
</Grid>
</Window>

在执行时,我的文本框中总是出现空白文本(即使我调用了点击事件)。
我浏览了 stackoverflow 网站,但无法解决问题(尽管很多问题都与这个问题很接近)
如果有任何遗漏或遗漏,有人可以建议我吗?

【问题讨论】:

    标签: c# wpf data-binding xaml


    【解决方案1】:

    数据绑定不适用于字段。改用属性:

    public int TmpVal {get; set;}
    public string TmpStr {get; set;}
    

    此外,如果您希望文本框自动从数据中获取更改,则理想情况下需要实现 INotifyPropertyChanged 或使其成为依赖属性或为每个 XXX 属性设置一个 XXXChanged 事件这不再起作用了)。

    <Window x:Class="WpfApplication5.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300" x:Name="ThisWindow">
        <StackPanel>
            <TextBox Name="txtTest1" Text="{Binding TmpStr, ElementName=ThisWindow}" />
            <Button Name="butTest1"  Click="viewButton_Click">Test123</Button>
        </StackPanel>
    </Window>
    

    以及背后的代码:

    public partial class Window1 : Window, INotifyPropertyChanged
    {
        public Window1()
        {
            this.TmpStr = "Windows Created";
            this.InitializeComponent();
            this.DataContext = this;
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        public string TmpStr { get; set; }
    
        public int TmpVal { get; set; }
    
        private void viewButton_Click(object sender, RoutedEventArgs args)
        {
            this.TmpStr = "Button clicked";
            if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs("TmpStr"));
            }
        }
    }
    

    【讨论】:

    • 为什么 XXXChanged 事件不再起作用?我在哪里可以读到这方面的信息?
    • 我认为它只存在于某些 CTP 或 v1 的早期测试版中。
    • 您应该在属性设置器中实现PropertyChanged 代码。因此,如果您的属性被代码更改,UI 将会更新。
    • 我认为这是理所当然的。我只是想显示尽可能少的代码。
    • 谢谢! “数据绑定不适用于字段。请改用属性”
    猜你喜欢
    • 1970-01-01
    • 2011-08-15
    • 2015-12-14
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多