2

WPF アプリでよくわからない問題が発生しています。特定のプロパティの値に応じて、塗りつぶしを別の色にバインドしようとしています。

関連するスニペットは次のとおりです。

public class GeoLocations
{

    private static ObservableCollection<Bus> _locations = new ObservableCollection<Bus>();
    public static ObservableCollection<Bus> locations
    {
        get { return _locations; }
        set 
        { 
            _locations = value;      
        }
    }
.
.
.
}
public class Bus : INotifyPropertyChanged
{
    private double _VSAI;
    public double VSAI
    {
        get
        {
            return _VSAI;
        }
        set
        {
            _VSAI = value;
            OnPropertyChanged(new PropertyChangedEventArgs("VSAI"));
        }
    }
public class VsaiToColorConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        double vsai = (double)value;

        if (vsai < App.Settings.medVSAI)
            return Brushes.Green;

        if (vsai >= App.Settings.medVSAI && vsai <= App.Settings.maxVSAI)
            return Brushes.Yellow;


        if (vsai > App.Settings.maxVSAI)
            return Brushes.Red;

        return Brushes.Transparent;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

次に、私のxamlには次のものがあります:

私が持っている私のリソースで

<local:GeoLocations x:Key="geolocs"/>

そして、私は地図を持っています

<ig:GeographicProportionalSymbolSeries x:Name="ProportionalSeries"
                                                       LongitudeMemberPath="Longitude"
                                                       LatitudeMemberPath="Latitude"
                                                       ItemsSource="{Binding Source={StaticResource geolocs}, Path=locations}"
                                                       >
                    <!-- custom marker template for GeographicProportionalSymbolSeries -->
                    <ig:GeographicProportionalSymbolSeries.MarkerTemplate>
                        <DataTemplate>
                            <Ellipse x:Name="RootElement" Width="10" Height="10" 
                                     Stroke="DarkGray"
                                     Opacity=".8"
                                     StrokeThickness="0.5" 
                                     Fill="{Binding Path=Item.VSAI, Converter={StaticResource VSAIConverter}}">
                          </Ellipse>
                        </DataTemplate>
                    </ig:GeographicProportionalSymbolSeries.MarkerTemplate>

しかし、私が得ているエラーは上記の FILL=..... にあります。これが簡単に修正されることを願っています。これを修正する方法とこのエラーの意味を理解するには、まだ少し新しすぎます。

4

1 に答える 1

7

コンバーターはIValueConverterインターフェイスを実装する必要があります。2 つのメソッドを実装しましたが、インターフェイスを省略したIValueConverterため、CLR に関する限り、たまたま同じメソッドを持っているがIValueConverter実際には実装していないクラスがあります。

public class VsaiToColorConverter : IValueConverter

value通常、nullケースも処理したい

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{  
    if(value == null) return Brushes.Transparent; //or null
    double vsai = (double)value;
    //..
}
于 2013-07-03T18:04:59.103 に答える