c# - 每次单击按钮时将更新的变量数据分配给 TextBlock
问题描述
我正在尝试创建一个小程序,而如果单击增加按钮,数字将加 1,反之亦然。
我设法将 _number 值绑定到 TextBlock(最初设置为 0),但是当我单击按钮时,似乎没有添加或减去该值。或者如果值更改但未在窗口上更新。
.xaml
// MainWindow.xaml
<Window x:Class="Home_Test.MainWindow"
...
Title="MainWindow" Height="450" Width="800">
<Grid Name="MainGrid">
<Button ...
Content="Add"
Click="increase"/>
<Button ...
Content="Subtract"
Click="decrease"/>
<TextBlock
Name="txtbox"
HorizontalAlignment="Center"
Height="23"
TextWrapping="Wrap"
Text="{Binding Path=Number}"
Width="120"
Margin="0,100,0,0" />
</Grid>
.xaml.cs
using System;
using System.Windows;
using System.ComponentModel;
using System.Runtime.CompilerServices;
...
namespace Home_Test
{
public partial class MainWindow : INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
private int _number = 0;
public int Number
{
get { return _number; }
set
{
if (_number != value)
{
_number = value;
}
}
}
public void increase(object sender, RoutedEventArgs e)
{
_number += 1;
}
public void decrease(object sender, RoutedEventArgs e)
{
_number -= 1;
}
public event PropertyChangedEventHandler PropertyChanged;
}
}
总的来说,我希望我的程序在单击按钮时加 1 或减 1。我在这里做错什么了吗?
解决方案
您的 XAML 看起来不错。只是为了澄清一下,您没有绑定_number
到 TextBlock。 _number
是私有变量,UI 无法访问。您应该将公共属性数据绑定Number
到 TextBlock。
正如 MarcE 在他的帖子中所描述的,问题出在您的 ViewModel 中。您的属性的 SetterNumber
需要调用您的 PropertyChanged 方法,需要添加该方法;并且您的增减方法需要Number
直接修改属性而不是其支持变量。当您只修改支持变量时,您的属性的设置器永远不会被调用,因此 UI 永远不会更新。
下面显示的是所需的代码修改:
private int _number = 0;
public int Number
{
get { return _number; }
set
{
if (_number != value)
{
_number = value;
//After the setter updates the backing variable, this Updates the UI.
NotifyPropertyChanged("Number");
}
}
}
public void increase(object sender, RoutedEventArgs e)
{
Number += 1;
}
public void decrease(object sender, RoutedEventArgs e)
{
Number -= 1;
}
添加此代码以使NotifyPropetyChanged
功能正常工作。
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
你的大部分时间都在那里。
推荐阅读
- python - 缓慢的数据库访问(FastAPI + Firebase)
- javascript - 在特定位置添加新项目,但无法删除该位置的旧项目
- java - 如何在java中的折线图中添加系列标签?
- elasticsearch - Elasticsearch 按术语聚合过滤
- tensorflow - 在图片中找到汽车牌照以在 CPU 上计算的正确网络架构是什么
- node.js - 使用 nginx 连接 404 对 MERN 进行 Dockerizing
- javascript - 为什么在使用“应用平台”时将 API 密钥存储在 DigitalOceans API“环境变量”选项中是安全的?
- java - 类文件 org/springframework/core/annotation/AnnotationUtils 中的未知常量标签 79
- angular - 如何获取在数组内的迭代对象,该数组也在另一个数组内以角度
- python - 如何将按钮动态连接到触发器 lambda pyqt5?