Prendiamo uno UserControl che contiene una semplice listbox:
1: <Grid>
2: <ListBox HorizontalAlignment="Stretch"
3: Name="listBox1"
4: ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl},Path=MyValues}"
5: VerticalAlignment="Stretch" />
6: </Grid>
e che espone una proprietà MyValues ovviamente definita come dependency property:
1: private static readonly DependencyProperty MyValuesProperty =
2: DependencyProperty.Register("MyValues",typeof(List<string>),
3: typeof(MyCustomList),
4: new PropertyMetadata(new List<string>())
5: );
6:
7: public List<string> MyValues
8: {
9: get { return (List<string>)GetValue(MyValuesProperty); }
10: set { SetValue(MyValuesProperty, (List<string>)value); }
11: }
Aggiungiamo due istanze dello stesso usercontrol all’interno di una Window:
1: <Grid>
2:
3: <my:MyCustomList HorizontalAlignment="Left"
4: Margin="40,36,0,0"
5: x:Name="myCustomList1"
6: VerticalAlignment="Top"
7: Width="252"
8: Height="74" />
9: <my:MyCustomList HorizontalAlignment="Left"
10: Margin="40,128,0,0"
11: x:Name="myCustomList2"
12: VerticalAlignment="Top"
13: Height="78"
14: Width="252" />
15: </Grid>
e nel costruttore scriviamo:
1: public MainWindow()
2: {
3: InitializeComponent();
4:
5: myCustomList1.MyValues.Add("How");
6: myCustomList1.MyValues.Add("Are");
7: myCustomList1.MyValues.Add("You?");
8: }
A questo punto la domanda è: perchè entrambi gli usercontrol hanno lo stesso contenuto?
La risposta qui: http://msdn.microsoft.com/en-us/library/cc903961(VS.95).aspx