【问题标题】:WPF Textbox Binding Is Not Updating When Setting Value设置值时 WPF 文本框绑定未更新
【发布时间】:2015-03-17 04:13:35
【问题描述】:

我有一个小程序来测试文本框数据绑定,当我更改文本框本身的值时它可以工作,但是当我尝试从代码隐藏中更改值时,变量已更新但文本框未更新.我环顾四周,但未能找到解决方案,因为我所看到的大多数是用于更新变量的文本框,这与我需要的相反。代码如下:

XAML:

<Grid>
    <TextBox Text="{Binding FirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Height="23" Margin="127,37,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
    <TextBox Text="{Binding LastName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Height="23" Margin="127,88,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
    <TextBlock HorizontalAlignment="Left" Margin="28,40,0,0" TextWrapping="Wrap" Text="First Name" VerticalAlignment="Top"/>
    <TextBlock HorizontalAlignment="Left" Margin="28,91,0,0" TextWrapping="Wrap" Text="Last Name" VerticalAlignment="Top"/>
    <Button x:Name="Name" Content="Name!" HorizontalAlignment="Left" Margin="145,212,0,0" VerticalAlignment="Top" Width="75" Click="Name_Click"/>

</Grid>

还有我的代码:

namespace WpfApplication1
{
public class UIControls : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private string _firstName;
    private string _lastName;

    protected void Notify(string propertyName)
    {
        if(this.PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public string FirstName
    {
        get { return _firstName; }
        set
        {
            if (value != _firstName)
            {
                _firstName = value;
                Notify("FirstName");
            }

        }
    }
    public string LastName
    {
        get { return _lastName; }
        set
        {
            if (value != _lastName)
            {
                _lastName = value;
                Notify("LastName");
            }
        }
    }
}

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        UIControls viewModel = new UIControls();
        this.DataContext = viewModel;
    }

    private void Name_Click(object sender, RoutedEventArgs e)
    {
        UIControls ui = new UIControls();
        ui.FirstName = "Mike";
        ui.LastName = "Smith";
    }
}

}

【问题讨论】:

  • 您希望实现什么?您创建新的UIControls 并更改其属性而不是DataContext 属性。将新实例设置为 DataContext 或从 DataContext 获取已经存在的 UIControls(或将其存储在另一个字段中)。

标签: c# wpf xaml data-binding


【解决方案1】:

你在每次按钮点击时都创建了新的 UIControls。新的 UIControls 未绑定到文本框。尝试创建绑定到 MainWindow 的私有文件,如下所示:

public partial class MainWindow : Window
{

    private UIControls viewModel;
    public MainWindow()
    {
        InitializeComponent();
        viewModel = new UIControls();
        this.DataContext = viewModel;
    }

    private void Name_Click(object sender, RoutedEventArgs e)
    {
        viewModel.FirstName = "Mike";
        viewModel.LastName = "Smith";
    }

【讨论】:

  • 谢谢!那工作得很好。还在学习如何编程,并认为它会像那样小。再次感谢!
  • 没问题,很高兴为您提供帮助。你能接受这个作为答案吗?如果我理解正确,这就是您的问题的答案。
  • 抱歉第一次发帖。已标记为答案,再次感谢您的快速帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
  • 2011-07-06
  • 2012-04-21
  • 1970-01-01
相关资源
最近更新 更多