[英]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 - 鍵
價值觀:
轉換器
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.