我想知道如何将文本块绑定到我的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>
这样做的正确方法是什么?再次感谢您的帮助!
答案 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。