如何将变量与文本块绑定

时间:2010-12-03 10:25:06

标签: wpf data-binding textblock

我想知道如何将文本块绑定到我的C#类中的变量。

基本上我的.cs文件中有一个“cart”变量。在那个Cart类中,我可以访问不同的总数。

以下是我对绑定的看法,但它似乎没有绑定到变量...

<StackPanel
   Width="Auto"
   Height="Auto"
   Grid.ColumnSpan="2"
   Grid.Row="5"
   HorizontalAlignment="Right">
   <TextBlock
      Name="Subtotal"
      FontFamily="Resources/#Charlemagne Std"
      FontSize="20"
      Text="{Binding ElementName=cart, Path=SubTotal}">
   </TextBlock>
   <TextBlock
      Name="Tax"
      FontFamily="Resources/#Charlemagne Std"
      FontSize="20"
      Text="{Binding ElementName=cart, Path=Tax}">
   </TextBlock>
   <TextBlock
      Name="Total"
      FontFamily="Resources/#Charlemagne Std"
      FontSize="20"
      Text="{Binding ElementName=cart, Path=Total}">
   </TextBlock>
</StackPanel>

这样做的正确方法是什么?再次感谢您的帮助!

4 个答案:

答案 0 :(得分:11)

如果您希望在购物车类更改时自动更新TextBox,则您的类必须实现INotifyPropertyChanged界面:

class Cart : INotifyPropertyChanged 
{
    // property changed event
    public event PropertyChangedEventHandler PropertyChanged;

    private int _subTotal;
    private int _total;
    private int _tax;

    private void OnPropertyChanged(String property)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
    }

    public int SubTotal
    {
        get
        {
            return _subTotal;
        }
        set
        {
            _subTotal = value;
            OnPropertyChanged("SubTotal");
        }
    }

    public int Total
    {
        get
        {
            return _total;
        }
        set
        {
            _total = value;
            OnPropertyChanged("Total");
        }
    }

    public int Tax
    {
        get
        {
            return _tax;
        }
        set
        {
            _tax = value;
            OnPropertyChanged("Tax");
        }
    }

}

答案 1 :(得分:7)

绑定中的

ElementName用于引用其他控件,而不是后面代码中的变量。要在代码后面引用变量,您需要将该变量分配给Control的DataContext属性。

替换以下每行代码:

<TextBlock Name="Subtotal" FontFamily="Resources/#Charlemagne Std" FontSize="20" Text="{Binding ElementName=cart, Path=SubTotal}"></TextBlock>

with:

<TextBlock Name="Subtotal" FontFamily="Resources/#Charlemagne Std" FontSize="20" Text="{Binding Path=SubTotal}"></TextBlock>

在Window的构造函数或Load事件中,编写以下代码:

this.DataContext = cart;

答案 2 :(得分:2)

两种解决方案..

第一个解决方案:

cart作为DataSource放在你的代码中:

DataSource = cart;

并按如下方式绑定它:

{Binding Path=PropertyOfCart}

第二个解决方案:

使用ElementName绑定绑定到您的根控件,并通过此控件上的属性获取购物车:

将购物车命名为您的根/父控件:

<UserControl .....snip..... x:Name="Root">

这样绑定它:

{Binding ElementName=Root, Path=Cart.PropertyOfCart}

请注意,Cart必须是UserControl的属性,而不是字段

答案 3 :(得分:0)

您需要将类设置为表单的数据源。另请参阅this question