数学运算符可以应用于绑定路径吗?

Old*_*zer 15 silverlight wpf xaml binding converter

我可以有以下(ActualWidth除以2)吗?

<StackPanel Name="SP2" Width="{Binding ElementName=SP1, Path=ActualWidth/2}">
Run Code Online (Sandbox Code Playgroud)

似乎对我不起作用.

谢谢.

Pao*_*tti 21

您可以使用自定义转换器直接在XAML中执行简单计算.

例如,看看这个实现:

MathConverter

用法简单:

<RotateTransform Angle="{Binding Text, ElementName=Seconds,
    Converter={ikriv:MathConverter}, ConverterParameter=x*6}" />
Run Code Online (Sandbox Code Playgroud)

经典的方法是创建一个只读计算的属性.所以在这个简单的例子中你可以添加第二个属性HalfWidth.

public double HalfWidth
{
    get
    {
        return ActualWidth / 2.0;
    }
}
Run Code Online (Sandbox Code Playgroud)

坏消息是,当ActualWidth更新时,StackPanel绑定的视图HalfWidth将不会更新.这是因为视图不知道HalfWidth已经改变了.

通过HalfWidth在setter中引发属性更改事件ActualWidth,视图将查询HalfWidth并因此检索正确的值.

private double _actualWidth;
public double ActualWidth
{
    get
    {
        return _actualWidth;
    }
    set
    {
        if (_actualWidth != value)
        {
            _actualWidth = value;
            OnPropertyChanged("ActualWidth");
            OnPropertyChanged("HalfWidth");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

关于这种方法的主要问题是,当我们有许多没有设定器的计算属性时,很快就会成为一场噩梦.

这就是为什么(在MVVM模式中)我个人更喜欢使用自定义转换器.