【问题标题】:WPF: gauge value converterWPF:仪表值转换器
【发布时间】:2018-06-18 07:58:48
【问题描述】:

所以我有一个简单的Gauge 类,它具有实现Propertychanged 的静态int 属性:

TotalPacketsSent

这个property 一直在提高,我想写简单的converter 并发送这个converter 这个property value 并根据这个property 返回一些值:

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"/>

这是我的Gause

<Controllers:Gauge x:Name="gauge"
                   Value="{Binding Path=(my:MyClass.TotalPacketsSent), Converter={StaticResource GaugeValueConverter}}"
                   Minimum="0"
                   Maximum="100"/>

所以我的问题是我的converter 根本不工作,我的意思是我看不到这甚至执行了。 任何想法为什么?

编辑:

这个property一直在变化,我有Label我正在用这种方式来显示它的价值:

Content="{Binding Path=(my:MyClass.TotalPacketsSent)}"

这很好用。

【问题讨论】:

  • 转换器是否关心它收到的价值?看起来您正在绑定到那里的静态属性,我不确定它是否会起作用。
  • 是的,请查看我在转换函数中的编辑
  • 这个属性(TotalPacketsSent)一直在变化,因为我提到我有一个简单的标签,可以实时显示这个属性值,这很好
  • MyClass.TotalPacketsSent 在转换器中似乎没有多大意义。 MyClass 应该在这里是什么?转换器类的属性?你有没有把它放在任何地方?您实际需要的似乎是带有多值转换器的 MyClass.TotalPacketsSentMyClass.TotalPacketsInList 的 MultiBinding。
  • 静态属性很简单(它甚至有类型或实现吗?)而且标签很简单很好,但是简单属性会引发简单的静态属性更改通知吗?跨度>

标签: wpf xaml


【解决方案1】:

您将value 参数转换为int,然后不使用它。

我想你正在寻找的是类似的东西(来自IMultiValueConverter而不是IValueConverter):

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
}

在 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 2010-11-24
    • 2011-09-23
    相关资源
    最近更新 更多