我希望能够看到文本块中的计数器值,该值在单击按钮时递增。我需要将它绑定到文本块。我想知道这样做的正确方法是什么。
XAML:
<TextBlock Text="{Binding Path=counter}" />
<Button x:Name="Nextbt" Content="Next" Click="ClickNextButton"/>
C#:
private void ClickNextButton(object sender, System.Windows.RoutedEventArgs e){
counter += 1;
if (counter == 1)
{
}
if (counter == 2)
{
}}
提前谢谢。
答案 0 :(得分:3)
1)创建一个返回计数器值的公共属性。将其命名为“Counter”
2)实施INotifyPropertyChanged并为计数器值的每次更改调用PropertyChanged(new PropertyChangedEventArgs(“Counter”))
3)按如下方式更改标记:
<TextBlock Text="{Binding Path=counter,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}" />
这只是许多人的可能性之一。 This链接可引导您查看DataBinding的概述。我可以想象这份文件将澄清上述步骤。
<强>更新强>
正如你在评论中所希望的那样,这里有一个例子,我假设你在主窗口。我已经针对上面的序列改变了一些东西:我在构造函数中设置了DataContext。因此,不再需要使用绑定的相对源。两种方式都是可能的(两者都不是很优雅,但要学习WPF-Databinding,它们是合适的)。也许你会尝试两者,唯一的区别是绑定声明和构造函数代码。
public partial class MainWindow : Window , INotifyPropertyChanged{
public event PropertyChangedEventHandler PropertyChanged;
int m_counter;
public MainWindow() {
InitializeComponent();
DataContext=this;
}
public int Counter {
get { return m_counter; }
set {
if (m_counter != value) {
m_counter = value;
OnPropertyChanged(new PropertyChangedEventArgs("Counter"));
}
}
}
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) {
if (null != PropertyChanged) {
PropertyChanged(this,e);
}
}
private void ClickNextButton(object sender, System.Windows.RoutedEventArgs e){
Counter += 1;
if (Counter == 1) { }
if (Counter == 2) { }
}
Continue with class declaration...
和XAML:
<TextBlock Text="{Binding Path=Counter}" />
<Button x:Name="Nextbt" Content="Next" Click="ClickNextButton"/>
答案 1 :(得分:1)
Counter
需要作为公共属性公开,以便TextBlock绑定到它。优选地,该属性应该实现改变通知。首先看MSDN's Data Binding overview!