Wpf 如何用文本块绑定变量
我想知道如何将文本块绑定到C#类中的变量 基本上,我的.cs文件中有一个“cart”变量。在该Cart类中,我可以访问不同的总计 下面是绑定的内容,但它似乎没有绑定到变量Wpf 如何用文本块绑定变量,wpf,data-binding,textblock,Wpf,Data Binding,Textblock,我想知道如何将文本块绑定到C#类中的变量 基本上,我的.cs文件中有一个“cart”变量。在该Cart类中,我可以访问不同的总计 下面是绑定的内容,但它似乎没有绑定到变量 <StackPanel Width="Auto" Height="Auto" Grid.ColumnSpan="2" Grid.Row="5" HorizontalAlignment="Right"> <TextBlock Name="Subtotal"
<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>
正确的做法是什么?再次感谢你的帮助 您需要将类设置为表单的数据源。另请参见。绑定中的ElementName用于引用其他控件,而不是代码隐藏中的变量。要引用代码隐藏中的变量,需要将该变量分配给控件的
DataContext
属性
替换出现的每一行代码:
<TextBlock Name="Subtotal" FontFamily="Resources/#Charlemagne Std" FontSize="20" Text="{Binding ElementName=cart, Path=SubTotal}"></TextBlock>
如果您还想在购物车类更改时自动更新文本框,则类必须实现
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");
}
}
}
两种解决方案
第一个解决方案:
将购物车
作为数据源放在代码后面:
DataSource = cart;
并对其进行如下约束:
{Binding Path=PropertyOfCart}
第二种解决方案:
使用ElementName绑定绑定到根控件,并通过此控件上的属性获取购物车:
命名购物车为属性的根/父控件:
<UserControl .....snip..... x:Name="Root">
请注意,Cart必须是UserControl的属性,而不是字段Id。建议在最接近的公共祖先而不是整个窗口上设置数据上下文。。。。其他控件中的绑定如何?
{Binding Path=PropertyOfCart}
<UserControl .....snip..... x:Name="Root">
{Binding ElementName=Root, Path=Cart.PropertyOfCart}