<local:WidgetControl x:Name="MyWidget" DataContext="{Binding ElementName=MyMap}"/>
<ComboBox x:Name="MyComboBox" ItemsSource="{Binding Layers}">
 <ComboBox.ItemTemplate>
  <DataTemplate>
   <TextBlock Text="{Binding ID}"/>
  </DataTemplate>
 </ComboBox.ItemTemplate>
</ComboBox>
#region Dependancy Properties
        protected static readonly DependencyProperty MapProperty=
            DependencyProperty.Register("Map", typeof(Map), typeof(YourUserControlName), new PropertyMetadata(OnMapPropertyChanged));
        public Map Map
        {
            get { return (Map)this.GetValue(MapProperty); }
            set
            {
                this.SetValue(MapProperty, (DependencyObject)value);                
            }
        }
        private static void OnMapPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            (d as YourUserControlName).PopulateLayerList();
        }
        private void PopulateLayerList()
        {           
            if (this.Map != null)
            {                                      
                //populate your layer list here
            }
        }
        #endregion       
Hi Ann,
One way to acheive this could be using Dependancy Property in your UserControl:#region Dependancy Properties protected static readonly DependencyProperty MapProperty= DependencyProperty.Register("Map", typeof(Map), typeof(YourUserControlName), new PropertyMetadata(OnMapPropertyChanged)); public Map Map { get { return (Map)this.GetValue(MapProperty); } set { this.SetValue(MapProperty, (DependencyObject)value); } } private static void OnMapPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { (d as YourUserControlName).PopulateLayerList(); } private void PopulateLayerList() { if (this.Map != null) { //populate your layer list here } } #endregion
Then your UserControl declaration in xaml will be:
[HTML]
<local:WidgetControl x:Name="MyWidget" Map="{Binding ElementName=MyMap}"/>
[/HTML]
I haven't tested it your scenario and there might be a better approach, but it might be worth trying.
Good Luck!
This binding can't work if 'MyMap' is not in the same xaml file.
<esri:Legend Map="{Binding ElementName=MyMap}"
<esri:Legend Map="{TemplateBinding Map}" .....
 
<local:LegendDialog x:Name="MyLegendDialog" Canvas.Left="430" Canvas.Top="200" Height="225" Width="218" Visibility="Collapsed"
     Map="{Binding ElementName=MyMap}" 
 />
					
				
			
			
				
			
			
				
			
			
			
			
			
			
		I get the following error..........The property 'Map' was not found in type LegendDialog
protected static readonly DependencyProperty MapProperty =
DependencyProperty.Register("Map", typeof(Map), typeof(LegendDialog), new PropertyMetadata(OnMapPropertyChanged));
 
public Map Map
{
 
get { return (Map)this.GetValue(MapProperty); }
set
{
this.SetValue(MapProperty, (DependencyObject)value);
MessageBox.Show("in the GetValue(MapProperty");
}
}
private static void OnMapPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
MessageBox.Show("in the OnMapPropertyChanged");
}
 
not sure what was needed in the private void PopulateLayerList()
