在XAML上将负值显示为正值

时间:2019-03-15 05:30:35

标签: c# .net wpf mvvm

<TextBlock Text="{Binding Value}"></TextBlock>

  private int exvalue = -1;

    public int Value
    {
        get { return exvalue; }
        set { exvalue = value;  OnPropertyChanged(new PropertyChangedEventArgs("Value"));}
    }

我只需要转换负值即可在XAML上显示为正值。请注意,我知道我可以通过转换器来实现这一点,我想知道是否有更简单的方法可以做到这一点。而且比将值实际绑定到Datagrid列并且该值来自我无法修改的dll更为复杂。

4 个答案:

答案 0 :(得分:3)

如果要在XAML中使用它,可以为此使用字符串格式:

 <TextBlock  Text="{Binding Value, StringFormat={}{0:#; #}}" />

string-format-int

答案 1 :(得分:0)

您可以使用Math.Abs()(绝对值)中的Abs。 Math类包含许多方便的数学相关方法和类,例如复数,sin / cos / tan等。

https://docs.microsoft.com/en-us/dotnet/api/system.math.abs?view=netframework-4.7.2

例如在C#代码中。

private int exvalue = -1;

    public int Value
    {
        get { return Math.Abs(exvalue); }
        set { exvalue = value;  OnPropertyChanged(new PropertyChangedEventArgs("Value"));}
    }

您将不得不编辑代码,或者您会弄乱文本格式,这绝对是一件令人头疼的事情,并且需要花很长时间,您显示给我们的代码不在dll中,所以我不确定为什么您不能使用您刚刚给我们的价值。

如果您确实无法编辑显示给我们的代码,在这种情况下,为什么要发布它,然后创建一个中间类,该中间类从集合中获取值,将所需的值绝对化,然后将其绑定到xaml。 / p>

当使用不同格式的数据时,这几乎是必需的,而不能直接操作该数据时,它几乎是必需的。如果您要维护绑定对象的接口,请考虑创建一个不带setter但带有getter的方法或新属性,该方法可以返回绝对值。

答案 2 :(得分:0)

一个简单的解决方案是,如果要避免使用任何转换器,请在get中使用三元运算符。

get { return exvalue < 0 ? exvalue * -1 : exvalue ; }

答案 3 :(得分:0)

尝试在属性的SET访问器中设置值。

private int exvalue = -1;

public int Value
{
    get { return exvalue; }
    set 
        { 
             if(exvalue<0)
             {
                exvalue = Math.Abs(value);
             } 
             else
             {
                exvalue=value;
             }
             OnPropertyChanged(new PropertyChangedEventArgs("Value"));}
}