0

<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

4 回答 4

4

如果你想在 XAML 中使用它,你可以使用字符串格式:

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

字符串格式整数

于 2019-03-15T06:37:10.200 回答
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。

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

于 2019-03-15T05:38:10.003 回答
0

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

get { return exvalue < 0 ? exvalue * -1 : exvalue ; }
于 2019-03-15T05:41:10.327 回答
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"));}
}
于 2019-03-15T06:16:20.440 回答