C# WPF MVVM -绑定VisibilityOnLegend或可见性不起作用

pxy2qtax  于 2023-02-05  发布在  C#
关注(0)|答案(1)|浏览(367)

图表上的绑定:FastLineBitmapSeries(SyncFusion包的一部分)不起作用。
怎么做?我有另一个属性使用了BoolToVisibility转换器,为什么这个不行呢?
下面是我的代码:

    • Xaml**
<chart:FastLineBitmapSeries DataContext="{Binding AllSeries[VT8PvPower]}" Interior="#7f84e8" VisibilityOnLegend="{Binding AllSeriesVisibility[VT10PvPower], Converter={StaticResource BoolToVisibility}, Mode=TwoWay}" />

DataContext工作正常,但VisibilityOnLegend不正常

    • 查看模型**

所有系列可见性属性:(与所有系列相同)

public ObservableDictionary<string, bool> AllSeriesVisibility { get; set; } = new ObservableDictionary<string, bool>();

属性的内容:
所有系列可见性-键

数值:

  • 这些值并不总是像pic中那样为真
    • 转换器**
public class VisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (!(value is bool bValue))
            return Visibility.Hidden;
        return bValue ? Visibility.Visible : Visibility.Collapsed;
    }

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

更改绑定模式/更改公共属性,我尝试放置公共布尔值而不是ObservableDictionnary,但仍然不起作用

gkl3eglg

gkl3eglg1#

我们已经分析了您的代码段,我们怀疑包含AllSeries和AllSeriesVisibility属性的类是相同的。
将BindingContext指定为AllSeries Key对象时,序列的其余绑定属性应位于AllSeries值对象中,而不是AllSeries父类中。
基于您的代码片段,我们创建了一个简单的示例,当给出如下所示的正确类结构时,它可以正常工作。此外,VisibilityonLegend将完美地工作。

<chart:SfChart x:Name="Chart" Margin="10">

 

            <chart:SfChart.Resources>

                <local:VisibilityConverter x:Key="BoolToVisiblity"/>

            </chart:SfChart.Resources>

              . . .

            <chart:FastLineBitmapSeries DataContext="{Binding AllSeries[Series1]}"

                                                                ItemsSource="{Binding ChartData}" Label="series1"

                                                                VisibilityOnLegend="{Binding AllSeriesVisibility[Series1],

                                                                Converter={StaticResource BoolToVisiblity}}"

                                                                XBindingPath="XValue" YBindingPath="YValue1" />

            <chart:FastLineBitmapSeries DataContext="{Binding AllSeries[Series2]}"

                                                                ItemsSource="{Binding ChartData}" Label="series2"

                                                                VisibilityOnLegend="{Binding AllSeriesVisibility[Series2],

                                                                Converter={StaticResource BoolToVisiblity }}"

                                                                XBindingPath="XValue" YBindingPath="YValue2" />

              . . .

</chart:SfChart>


public class ViewModel

{       

        public Dictionary<string, ViewModel1> AllSeries { get; set; } =

        new Dictionary<string, ViewModel1>();

        public string Series1Name { get; set; } = "Series1";

        public string Series2Name { get; set; } = "Series2";

        public ViewModel()

        {

            AllSeries["Series1"] = new ViewModel1(false);

            AllSeries["Series2"] = new ViewModel1(true);

        }

}

 

public class ViewModel1

{

        private ObservableCollection<DataPoint> _chartData;

        public ObservableCollection<DataPoint> ChartData

        {

            get { return _chartData; }

            set { _chartData = value; }

        }

        public Dictionary<string, bool> AllSeriesVisibility { get; set; } = new Dictionary<string, bool>();

        public ViewModel1(bool value)

        {

            AllSeriesVisibility["Series1"] = value;

            AllSeriesVisibility["Series2"] = value;

            var vTemp = new ObservableCollection<DataPoint>();

            var random = new Random();

            for (var i = 1; i < 15; i++)

            {

                vTemp.Add(new DataPoint { XValue = i, YValue1 = random.NextDouble(),

                                          YValue2=random.NextDouble() });

            }

            ChartData = vTemp;

        }

}

请检查此信息,如果您需要任何进一步的帮助,请告诉我们。
此致,穆尼什·库马尔·G

相关问题