簡體   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