如何将计数器值绑定到文本块?

时间:2011-01-18 22:35:18

标签: wpf binding

我希望能够看到文本块中的计数器值,该值在单击按钮时递增。我需要将它绑定到文本块。我想知道这样做的正确方法是什么。

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)
{

}}

提前谢谢。

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