C# 每次单击按钮时,将更新的变量数据分配给文本块
我正在尝试创建一个小程序,但是如果单击“增加”按钮,数字将增加1,反之亦然,单击“减少”按钮 我设法将_number值绑定到TextBlock(最初设置为0),但当我单击按钮时,似乎没有一个按钮添加或减去该值。或者如果值已更改,但未在窗口上更新 .xamlC# 每次单击按钮时,将更新的变量数据分配给文本块,c#,wpf,xaml,desktop-application,C#,Wpf,Xaml,Desktop Application,我正在尝试创建一个小程序,但是如果单击“增加”按钮,数字将增加1,反之亦然,单击“减少”按钮 我设法将_number值绑定到TextBlock(最初设置为0),但当我单击按钮时,似乎没有一个按钮添加或减去该值。或者如果值已更改,但未在窗口上更新 .xaml // MainWindow.xaml <Window x:Class="Home_Test.MainWindow" ... Title="MainWindow" Height="450" Width="800">
// 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>
}
总的来说,我希望我的程序在单击按钮时加1或减1。
我在这里做错了什么吗?number属性的set方法没有触发OnPropertyChanged事件。查看此处以了解详细信息您的想法是正确的,但是您缺少了几块: 1) XAML UI正在监视
Number
属性的更改,以便进行更新,但您的increase()
和decrease()
方法只更新支持变量。您必须直接设置Number
属性
2)
Number
上的setter方法需要通知XAML UI在更改时进行更新。这是通过在属性设置器中调用OnPropertyChangedEvent来完成的-请参阅(它讨论的是windows窗体,但机制是相同的)您的XAML看起来不错。不过,为了澄清,您没有将\u number
绑定到文本块<代码>\u编号是一个专用变量,用户界面无法访问。您将公共属性Number
数据绑定到TextBlock,这是您应该做的
正如MarcE在他的帖子中所描述的,问题出现在您的ViewModel中。Number
属性的Setter需要调用PropertyChanged方法,需要添加该方法;您的递增和递减方法需要直接修改Number
属性,而不是其支持变量。
当您只是修改支持变量时,属性的setter永远不会被调用,因此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;
}
添加此代码以使notifyPropertyChanged
功能正常工作
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
你在去那里的路上大部分时间都在那里
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}