Add Interactively MVVM

This sample demonstrates adding graphics through user interaction using the Model View ViewModel (MVVM) design pattern. The sample uses the Toolkit's Toolbar control and the Draw object to provide graphic drawing tools.

Download Sample Application
XAML C# VB.NET
<UserControl x:Class="ArcGISWPFSDK.DrawGraphicsMVVM"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:esri="http://schemas.esri.com/arcgis/client/2009"             
        xmlns:local="clr-namespace:ArcGISWPFSDK"      
        xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity">
    <Grid x:Name="LayoutRoot">
        <Grid.Resources>
            <esri:SimpleLineSymbol x:Key="RedLineSymbol" Color="Red" Width="3" Style="Solid" />
            <local:MainViewModelDrawGraphics x:Key="MyMainViewModel" />
            <local:CommandGenerator x:Key="MyCommandGenerator" />
           
        </Grid.Resources>
        <Grid DataContext="{StaticResource MyMainViewModel}">
            <esri:Map x:Name="MyMap" WrapAround="True" UseAcceleratedDisplay="True" Extent="-15000000,2000000,-7000000,8000000" Background="#FFE3E3E3" MinimumResolution="2500">
                <esri:ArcGISLocalTiledLayer ID="Topographic USA" Path="..\Data\TPKs\Topographic.tpk"/>
                <esri:GraphicsLayer ID="MyGraphicsLayer" 
                          GraphicsSource="{Binding Graphics, Source={StaticResource MyMainViewModel}}">
                    <esri:GraphicsLayer.Renderer>
                        <esri:SimpleRenderer Symbol="{StaticResource RedLineSymbol}" />
                    </esri:GraphicsLayer.Renderer>
                </esri:GraphicsLayer>
            </esri:Map>
            <Border Background="White" BorderThickness="1" 
                HorizontalAlignment="Right" VerticalAlignment="Top"
                Margin="10" BorderBrush="White">
                <Border.Effect>
                    <DropShadowEffect/>
                </Border.Effect>
                <Grid Margin="10" Background="White">
                    <StackPanel Orientation="Vertical">
                        <StackPanel x:Name="MyStackPanel" Orientation="Horizontal" Width="600" Height="60">
                            <Button Margin="5"
              Command="{Binding ConverterParameter=DoFreehand, Converter={StaticResource MyCommandGenerator}}"           
                      ToolTipService.ToolTip="Add a freehand line">
                                <Image Source="/Assets/images/DrawFreehand.png" Margin="2" />
                            </Button>
                            <Button Margin="5"
              Command="{Binding ConverterParameter=DoLine, Converter={StaticResource MyCommandGenerator}}"
                   ToolTipService.ToolTip="Add a Line Segment">
                                <Image Source="/Assets/images/DrawLineSegment.png" Margin="2" />
                            </Button>
                            <Button Margin="5"
              Command="{Binding ConverterParameter=DoPolyline, Converter={StaticResource MyCommandGenerator}}"
                ToolTipService.ToolTip="Add a polyline">
                                <Image Source="/Assets/images/DrawPolyline.png" Margin="2" />
                            </Button>
                            <Button Margin="5"
              Command="{Binding ConverterParameter=DoPolygon, Converter={StaticResource MyCommandGenerator}}"           
                    ToolTipService.ToolTip="Add a polygon">
                                <Image Source="/Assets/images/DrawPolygon.png" Margin="2" />
                            </Button>
                            <Button Margin="5"
              Command="{Binding ConverterParameter=DoRectangle, Converter={StaticResource MyCommandGenerator}}"            
                            ToolTipService.ToolTip="Add a rectangle">
                                <Image Source="/Assets/images/DrawRectangle.png" Margin="2" />
                            </Button>
                            <Button  Margin="5"
              Command="{Binding ConverterParameter=DoCircle, Converter={StaticResource MyCommandGenerator}}"
               ToolTipService.ToolTip="Add a circle">
                                <Image Source="/Assets/images/DrawCircle.png" Margin="2" />
                            </Button>
                            <Button Margin="5"
              Command="{Binding ConverterParameter=DoEllipse, Converter={StaticResource MyCommandGenerator}}"
                   ToolTipService.ToolTip="Add an ellipse">
                                <Image Source="/Assets/images/DrawEllipse.png" Margin="2" />
                            </Button>
                            <Button Margin="5"
              Command="{Binding ConverterParameter=DoTriangle, Converter={StaticResource MyCommandGenerator}}"
          
              ToolTipService.ToolTip="Add a triangle">
                                <Image Source="/Assets/images/DrawTriangle.png" Margin="2" />
                            </Button>
                            <Button Margin="5"
              Command="{Binding ConverterParameter=DoArrow, Converter={StaticResource MyCommandGenerator}}"
         
              ToolTipService.ToolTip="Add an arrow">
                                <Image Source="/Assets/images/DrawArrow.png" Margin="2"/>
                            </Button>
                            <Button Margin="5"
              Command="{Binding ConverterParameter=ClearGraphics, Converter={StaticResource MyCommandGenerator}}"
        
                         ToolTipService.ToolTip="Clear graphics">
                                <Image Source="/Assets/images/StopDraw.png" Margin="2" />
                            </Button>
                        </StackPanel>
                    </StackPanel>
                </Grid>
            </Border>
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="Loaded">
                    <i:InvokeCommandAction Command="{Binding ConverterParameter=SetMap, Converter={StaticResource MyCommandGenerator}}"
                                 CommandParameter="{Binding ElementName=MyMap}" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Grid>
    </Grid>
</UserControl>

Sample code usage restrictions
5/16/2014