Как связать переменную с textblock
мне было интересно, как я смогу привязать текстовый блок к переменной в моем классе C#.
в основном у меня есть переменная" корзина " в моем .cs файл. В этом классе карт у меня есть доступ к различным итоговым данным.
следующее-Это то, что у меня есть для привязки, но он, похоже, не привязывается к переменной...
<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 ответов
Если вы хотите, чтобы текстовые поля автоматически обновлялись при изменении класса корзины, ваш класс должен реализовать 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");
}
}
}
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>
и в конструкторе вашего окна или событии загрузки напишите следующий код:
this.DataContext = cart;
два решения..
первый вариант:
поставить cart
как источник данных в вашем коде позади:
DataSource = cart;
и привязать к нему следующим образом:
{Binding Path=PropertyOfCart}
второй вариант:
привязка к корневому элементу управления с привязкой ElementName и получить корзину через свойство на этом элементе управления:
Назовите свой корневой / родительский элемент управления, где корзина является свойством:
<UserControl .....snip..... x:Name="Root">
привязать к нему как это:
{Binding ElementName=Root, Path=Cart.PropertyOfCart}
обратите внимание, что корзина должна быть свойством вашего UserControl, а не полем
вы должны указать свой класс в качестве источника данных для формы. См. также этот вопрос.