gpt4 book ai didi

c# - 将标签绑定(bind)到变量

转载 作者:行者123 更新时间:2023-11-30 13:31:10 24 4
gpt4 key购买 nike

我刚开始使用 WPF,我正在尝试设置局部变量和标签之间的绑定(bind)。基本上我想在局部变量更改时更新标签。我正在寻找解决方案,但他们都只是使用文本框作为源,而不仅仅是类变量,我什至不确定它是否以这种方式工作。所以这是我的代码。

public partial class MainWindow : Window
{
int idCounter;

public MainWindow()
{
InitializeComponent();


Binding b = new Binding();
b.Source = idCounter;
b.Mode = BindingMode.OneWay;
b.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;

myLabel.SetBinding(Label.ContentProperty,b);
}

private void Button_Click(object sender, RoutedEventArgs e)
{
idCounter++;
}
}

Button 确实有效,idCounter 改变了值,但它没有在标签中更新,所以我猜绑定(bind)是错误的。有人能告诉我哪里出了问题吗?谢谢

最佳答案

如果您将类更改为此...,您的代码将正常工作

  public partial class Window1 : Window, INotifyPropertyChanged
{
private int _idCounter;
public int IdCounter
{
get { return _idCounter; }
set
{
if (value != _idCounter)
{
_idCounter = value;
OnPropertyChanged("IdCounter");
}
}
}
public Window1()
{
InitializeComponent();
myLabel.SetBinding(ContentProperty, new Binding("IdCounter"));
DataContext = this;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
e.Handled = true;
IdCounter++;
}
#region INotifyPropertyChanged Implementation
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string name)
{
var handler = System.Threading.Interlocked.CompareExchange(ref PropertyChanged, null, null);
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
#endregion
}

您遇到的一些问题是...

窗口本身应该实现 INotifyPropertyChanged 以便绑定(bind)引擎可以听到它。

IdCounter 需要是公开的并且有一个公开的 getter 以便绑定(bind)引擎可以“获取”它。

您应该将 DataContext 设置为已声明 IdCounter 的任何类(在本例中为 MainWindow)。部分问题在于绑定(bind)引擎没有 DataContext。

BindingMode 设置是一个误会,因为 Label 默认以这种方式绑定(bind)。

UpdateSourceTrigger 是一个误会,因为标签的内容没有更新源属性的机制。标签的内容不像文本框,用户可以在其中键入代码需要了解的内容。当您绑定(bind)到用户无法更改的内容时,忘记 UpdateSourceTrigger,重要的是 Target 属性。

处理程序应标记该事件。这是很好的做法,不会影响绑定(bind)。

绑定(bind)构造函数只需要路径。

这段代码会给你预期的结果;即,单击按钮时标签会更新。在 vs2013、.net 4.5 上检查、编译和执行。

其他受访者表示您应该使用 View 模型。我 100% 同意这一点,总的来说这是值得考虑的一件好事。

关于c# - 将标签绑定(bind)到变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23716059/

24 4 0