[英]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.