繁体   English   中英

C# WPF MVVM - 绑定 VisibilityOnLegend 或 Visibility 不起作用

[英]C# WPF MVVM - Binding VisibilityOnLegend or Visibility don't work

图表上的绑定:作为 SyncFusion package 一部分的 FastLineBitmapSeries 不起作用。

怎么做? 我有另一个使用 BoolToVisibility 转换器的属性,为什么不使用这个呢?

这是我的代码:

Xaml

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

DataContext 工作正常但不是 VisibilityOnLegend

查看model

AllSeriesVisibility 属性:(与 AllSeries 相同)

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

属性内容:

AllSeriesVisibility - 键

AllSeriesVisibility - 键

价值观:

价值观

  • 这些值并不总是像图片中那样真实

转换器

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();
    }
}

更改绑定模式/更改公共属性,我尝试使用 public bool 而不是 ObservableDictionnary 但它仍然不起作用

我们已经分析了您的代码片段,我们怀疑包含 AllSeries 和 AllSeriesVisibility 属性的类是相同的。

当您将 BindingContext 指定为 AllSeries 键 object 时,该系列的其余绑定属性应在 AllSeries 值 object 中,而不是在 AllSeries 父 class 中。

根据您的代码片段,我们创建了一个简单的示例,在给出正确的 class 结构时可以正常运行,如下所示。 此外,VisibilityonLegend 将 function 完美无缺。

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

        }

}

请检查此项,如果您需要任何进一步的帮助,请告诉我们。

问候, Muneesh Kumar G

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM