POST
|
It's been a while, but we cretaed a workaround to make the legend work as desired, at least in our case. We added a IValueConverter for IsChecked-Property of the CheckBox: <esri:Legend.LayerTemplate>
<DataTemplate>
<!--<StackPanel Orientation="Horizontal">-->
<CheckBox Content="{Binding Label}" IsChecked="{Binding Converter={StaticResource myLayerVisibilityConverter}, Mode=OneWay}" Tag="{Binding}" Checked="chkLayerTemplate_Checked" Unchecked="chkLayerTemplate_UnChecked"/>
<!--</StackPanel>-->
</DataTemplate>
</esri:Legend.LayerTemplate> The converter: public sealed class LayerItemViewModelToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
LayerItemViewModel _vmodel = value as LayerItemViewModel;
if (_vmodel as LayerItemViewModel == null)
return true;
ArcGISDynamicMapServiceLayer _layerParent = _vmodel.Layer as ArcGISDynamicMapServiceLayer;
if (_layerParent == null)
return true;
bool isVisible = true;
int subID = _vmodel.SubLayerID;
if (_layerParent.VisibleLayers != null)
{
if (!_layerParent.VisibleLayers.Contains(subID))
isVisible = false;
}
return isVisible;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
} And in code-behind the checked and unchecked-events of the CheckBox: private void chkLayerTemplate_Checked(object sender, RoutedEventArgs e)
{
if (!(sender is CheckBox))
return;
Esri.ArcGISRuntime.Toolkit.Controls.Primitives.LayerItemViewModel _layerVM = ((CheckBox)sender).Tag as Esri.ArcGISRuntime.Toolkit.Controls.Primitives.LayerItemViewModel;
if (_layerVM == null)
return;
ArcGISDynamicMapServiceLayer _layerParent = _layerVM.Layer as ArcGISDynamicMapServiceLayer;
if (_layerParent == null)
return;
var subId = _layerVM.SubLayerID;
if (_layerParent.VisibleLayers != null)
{
if (!_layerParent.VisibleLayers.Contains(subId))
_layerParent.VisibleLayers.Add(subId);
}
}
private void chkLayerTemplate_UnChecked(object sender, RoutedEventArgs e)
{
if (!(sender is CheckBox))
return;
Esri.ArcGISRuntime.Toolkit.Controls.Primitives.LayerItemViewModel _layerVM = ((CheckBox)sender).Tag as Esri.ArcGISRuntime.Toolkit.Controls.Primitives.LayerItemViewModel;
if (_layerVM == null)
return;
ArcGISDynamicMapServiceLayer _layerParent = _layerVM.Layer as ArcGISDynamicMapServiceLayer;
if (_layerParent == null)
{
((CheckBox)sender).IsChecked = true; //no other types
return;
}
var subId = _layerVM.SubLayerID;
if (_layerParent.VisibleLayers != null)
{
if (_layerParent.VisibleLayers.Contains(subId))
_layerParent.VisibleLayers.Remove(subId);
}
}
... View more
04-05-2016
06:20 AM
|
0
|
0
|
367
|
POST
|
We are using ArcGIS Runtime .NET 10.2.6 and the legend-control in ArcGIS Runtime Toolkit for Windows Desktop. We are trying to add a checkbox to each subLayer from a DynamicMapService to switch visibility. We've been able to add a checkbox defined in a LayerTemplate. So far, we have (based on the runtime .NET sample "LegendsInTreeViewSample): <esri:Legend x:Name="legend2" Layers="{Binding Converter={StaticResource enumerator}}" ShowOnlyVisibleLayers="False" >
<esri:Legend.LayerTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox Content="{Binding Label}" IsChecked="{Binding IsEnabled, Mode=TwoWay}"/>
</StackPanel>
</DataTemplate>
</esri:Legend.LayerTemplate>
</esri:Legend> In line 5 the binding of the property "Label" works fine, it shows the layers lable. Unfortunately it doesn't work with the property "IsEnabled": if one checkbox is cheked/unchecked, all other layers on the same level are also affected . Has anyone experienced similar behavior? Is there a workaround to achieve the desired behavior? Thanks in advance, Fabian
... View more
12-02-2015
08:29 AM
|
0
|
3
|
4038
|
Online Status |
Offline
|
Date Last Visited |
11-11-2020
02:23 AM
|