В моем приложении я привязываю несколько текстовых полей к свойствам. Итак, в c # у меня есть:
public class MyUserControl : UserControl, INotifyPropertyChanged
{
decimal _Price;
public decimal Price
{
get { return _Price; }
set
{
_Price = value;
OnPropertyChanged("Price");
}
}
// implement interface
public event PropertyChangedEventHandler PropertyChanged = delegate { };
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
// etc
, а на xaml у меня есть:
<TextBox Name="txtPrice" DataContext="{Binding}" Text="{Binding Price, UpdateSourceTrigger=PropertyChanged, StringFormat=c}"></TextBox>
, тогда если в моем коде я установилНапример, цена = 12,22 будет отображать $ 12,22 в текстовом поле.
Теперь, поскольку я очень часто использую это поведение, я хочу создать класс, который будет создавать для меня свойство, привязанное к текстовому полю.Итак, мой класс выглядит так:
public class ControlBind<T> : INotifyPropertyChanged
{
protected T _Value;
public T Value
{
get { return _Value; }
set
{
_Value = value;
OnPropertyChanged("Value");
}
}
public event PropertyChangedEventHandler PropertyChanged = delegate { };
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public ControlBind(Control control, System.Windows.DependencyProperty controlPropertyToBind)
{
Binding b = new Binding("Value")
{
Source = this
};
b.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
control.SetBinding(controlPropertyToBind, b);
}
}
, тогда я смогу использовать этот класс и создать такое же поведение, выполнив:
// txtPrice is a textbox defined in xaml
ControlBind<decimal> Price = new ControlBind<decimal>(txtPrice, TextBox.TextProperty);
Price.Value = 45; // update textbox value to "45"
, но теперь я не знаю, каксделать формат строки.Когда я использую класс, текстовое поле печатает 45, и я хочу, чтобы оно напечатало $ 45
Другими словами, как я могу добиться связывания xaml {Binding Price, StringFormat=c}
в коде