gpt4 book ai didi

WPF数据绑定(bind)文本框到另一个对象中的整数属性

转载 作者:行者123 更新时间:2023-12-03 15:11:43 25 4
gpt4 key购买 nike

我有一个我认为是一个非常简单的数据绑定(bind)问题(我还是 WPF 的新手)。
我有一个类(这个问题的简化版)

public class ConfigurationData
{
public int BaudRate { get; set; }
}

在 MainWindow.Xaml.cs 我有一个私有(private)成员变量:
private ConfigurationData m_data;

和一个方法
void DoStuff()
{
// do a bunch of stuff (read serial port?) which may result in calling...
m_data.BaudRate = 300; // or some other value depending on logic
}

在我的 MainWindow gui 中,我想要一个显示 m_data.BaudRate 并允许两种方式绑定(bind)的 TextBox。用户应该能够在文本框中输入一个值,并且文本框应该显示我们由“DoStuff()”方法引起的新值。我已经看到了大量关于绑定(bind)到 MainWindow 上控件的另一个属性以及绑定(bind)到数据集合的示例,但没有绑定(bind)到另一个对象的属性的示例。我认为我的示例非常简单,但令人烦恼的是我绑定(bind)到一个整数而不是字符串,如果可能的话,我希望用户只能输入整数。
顺便说一句,我考虑使用数字上/下,但决定反对它,因为似乎没有很多非商业数字上/下控件的支持/示例。另外,它可能是一个非常大的数字范围。

我认为指向一个好例子的指针会让我上路。
提前谢谢了,
戴夫

最佳答案

尽管这个问题很老,但它是一个很好的问题,很少有人简洁地回答。让我为访问此页面的其他人提供一个简化的解决方案。

为了支持双向绑定(bind),您的初始 ConfigurationData必须扩展类以支持属性更改。否则 DoStuff() 中的更改不会反射(reflect)在 UI 文本框中。这是一种典型的做法:

using System.ComponentModel;
public class ConfigurationData : INotifyPropertyChanged
{
private int _BaudRate;
public int BaudRate
{
get { return _BaudRate; }
set { _BaudRate = value; OnPropertyChanged("BaudRate"); }
}

//below is the boilerplate code supporting PropertyChanged events:
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}

我选择将文本框绑定(bind)直接放在 XAML 中(我还向 DoStuff 添加了一个按钮),如下所示:
<Canvas>
<TextBox Width="96" Name="textBox1" Text="{Binding BaudRate}" />
<Button Width="96" Canvas.Top="25" Content="ChangeNumber" Click="DoStuff"/>
</Canvas>

棘手的部分是将这一切粘合在一起。为此,您需要定义 DataContext。我更喜欢在主窗口的构造函数中执行此操作。这是代码:
public partial class MainWindow : Window
{
private ConfigurationData m_data;
public MainWindow()
{
InitializeComponent();
m_data = new ConfigurationData();
this.DataContext = m_data; // This is the glue that connects the
// textbox to the object instance
}

private void DoStuff(object sender, RoutedEventArgs e)
{
m_data.BaudRate += 300;
}
}

关于WPF数据绑定(bind)文本框到另一个对象中的整数属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3886163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com