在我的应用程序中,我将几个文本框绑定到属性。 所以在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>
然后如果在我的代码后面我设置了Price = 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"
所以换句话说,我怎样才能在
背后的代码中实现xaml绑定{Binding Price, StringFormat=c}
答案 0 :(得分:1)
您应该可以通过Converters完成此操作。
可以尝试从后面的代码中编写类似的代码:
public ControlBind(Control control, System.Windows.DependencyProperty controlPropertyToBind)
{
Binding b = new Binding("Value")
{
Source = this,
Converter = new MyCurrencyConverter() //Converter
};
b.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
control.SetBinding(controlPropertyToBind, b);
}
MyCurrencyConverter
将您的45
转换为$45
。
希望这有帮助。
答案 1 :(得分:1)
未经测试,但我认为:
Binding b = new Binding("Value")
{
Source = this,
StringFormat = "c"
};
答案 2 :(得分:0)
要完全在代码中执行它,您可以只使用Price.ToString(“C”),否则@Tigran使用转换器的解决方案就是您想要的方式。