2010-12-03 61 views
7

我想知道如何將文本塊綁定到我的C#類中的變量。如何將變量與文本塊綁定

基本上我在我的.cs文件中有一個「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> 

是什麼做的正確方法是什麼?再次感謝您的幫助!

回答

11

如果你還希望文本框在你的購物車類改變時自動更新,你的類必須impl EMENT的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"); 
     } 
    } 

} 
0

您需要將您的課程設置爲表單的數據源。另見this question

7

ElementName綁定用於引用其他控件,而不是代碼後面的變量。要在後面的代碼中引用變量,您需要將該變量分配給控件的DataContext屬性。

替換下面的代碼行的每一次出現:

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

有:

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

而在你的窗口的構造函數或Load事件,寫下面的代碼:

this.DataContext = cart; 
+0

Id建議將數據conetext設置爲最接近的共同祖先而不是整個窗口....在其他控件中的綁定是什麼? – Machinarius 2010-12-03 13:05:24

2

兩種解決方案..

解決方案一:

cart作爲數據源在後面的代碼:

DataSource = cart; 

並綁定到它如下:

{Binding Path=PropertyOfCart} 

解決方法二:

綁定到用的ElementName根控制結合,並獲得通過此控件的屬性車:

名稱根/母公司控制,其中車是一個屬性格式:

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

綁定到它是這樣的:

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

請注意,購物車必須是您的UserControl的財產,而不是一個字段