WPF:仪表值转换器
因此,我有一个简单的WPF:仪表值转换器,wpf,xaml,Wpf,Xaml,因此,我有一个简单的Gauge类,该类具有静态int属性,实现了属性更改: TotalPacketsSent 这个属性一直在增加,我想编写一个简单的转换器,然后发送这个转换器这个属性并基于这个属性返回一些值: public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { int val = (int)value; double percentag
Gauge
类,该类具有静态int
属性,实现了属性更改
:
TotalPacketsSent
这个属性
一直在增加,我想编写一个简单的转换器
,然后发送这个转换器
这个属性
并基于这个属性
返回一些值:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int val = (int)value;
double percentage = ((double)MyClass.TotalPacketsSent / MyClass.TotalPacketsInList) * 100;
return percentage;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
在Window.Resources
下,我有:
<Convertors:GaugeValueConverter x:Key="GaugeValueConverter"/>
所以我的问题是我的转换器根本不工作,我的意思是,我看不到它甚至执行了。
你知道为什么吗
编辑:
此属性
一直在更改,我有标签
我使用这种方式显示其值:
Content="{Binding Path=(my:MyClass.TotalPacketsSent)}"
这很好。您将value
参数转换为int
,然后不使用它
我想你要找的是(源自IMultiValueConverter
而不是IValueConverter
):
在XAML中:
<Controllers:Gauge x:Name="gauge" Minimum="0" Maximum="100">
<Controllers:Gauge.Value>
<MultiBinding Converter="{StaticResource GaugeValueConverter}">
<Binding Path="(my:MyClass.TotalPacketsSent)" />
<Binding Path="(my:MyClass.TotalPacketsInList)" />
</MultiBinding>
</Controllers:Gauge.Value>
</Controllers:Gauge>
转换器是否关心它接收到的值?看起来您正在绑定到一个静态属性,我不确定它是否能正常工作。是的,请查看我的转换函数内的编辑此属性(TotalPacketsSent)一直在更改,正如我所提到的,我有一个简单的标签,实时显示这个属性值,这很好MyClass。TotalPacketsSent在转换器中似乎没有多大意义。我的班级应该在这里干什么?转换器类的属性?你有没有把它放在任何地方?您实际需要的似乎是一个带多值转换器的MyClass.TotalPacketsSent和MyClass.TotalPacketsList的多重绑定。静态属性很简单(它甚至有类型或实现吗?)和标签很简单,这很好,但是简单属性是否会引发简单静态属性更改通知?
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
double totalPacketsSent = (double)values[0];
double totalPacketsInList = (double)values[1];
// further validation for handling divide by zero, etc. may need to go here
return totalPacketsSent / totalPacketsInList * 100
}
<Controllers:Gauge x:Name="gauge" Minimum="0" Maximum="100">
<Controllers:Gauge.Value>
<MultiBinding Converter="{StaticResource GaugeValueConverter}">
<Binding Path="(my:MyClass.TotalPacketsSent)" />
<Binding Path="(my:MyClass.TotalPacketsInList)" />
</MultiBinding>
</Controllers:Gauge.Value>
</Controllers:Gauge>