<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更为复杂。
答案 0 :(得分:3)
如果要在XAML中使用它,可以为此使用字符串格式:
<TextBlock Text="{Binding Value, StringFormat={}{0:#; #}}" />
答案 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"));}
}