Problème de binding avec UserControl
Bonjour,
Débutant avec XAML/WPF, je patauge totalement avec un binding sur un UserControl. :(
Contexte :
J'ai un UserControl que je peux déplacer librement (drag&drop) dans un canvas de la fenêtre principale. Ce UserControl possède une propriété 'maProprieteX' que je souhaite récupérer dans la fenêtre principale via une TextBox ; et c'est là que ce pose le problème ! Comment faire ??
Malgré mes nombreux tests aucun n'a été concluant... :cry:
Code de Window1.xaml :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| <?xml version="1.0" encoding="utf-8"?>
<Window
x:Class="MonEspace.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:TEST_14.MonEspace"
Title="TEST_14"
Height="300"
Width="300">
<Window.Resources>
</Window.Resources>
<Grid>
<Canvas>
<TextBox
Grid.Column="0"
Grid.Row="0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Margin="28,46,25,0"
Text="Je souhaite récupérer la propriété 'maProprieteX' de UserControl1"
Width="237"
Height="61"
/>
<Thumb
Name="myThumb"
DragCompleted="OnDragComplete"
DragStarted="onDragStarted"
DragDelta="OnDragDelta"
AllowDrop="True"
>
<Thumb.Template>
<ControlTemplate>
<s:UserControl1
x:Name="TOTO"
Width="100"
Height="100"
maProprieteX="66">
</s:UserControl1>
</ControlTemplate>
</Thumb.Template>
</Thumb>
</Canvas>
</Grid>
</Window> |
Code de Window1.xaml.vb :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Data
Imports System.Windows.Documents
Imports System.Windows.Input
Imports System.Windows.Media
Imports System.Windows.Media.Imaging
Imports System.Windows.Shapes
Imports System.Diagnostics
Imports System.Windows.Controls.Primitives
Namespace MonEspace
''' <summary>
''' Interaction logic for Window1.xaml
''' </summary>
Public Partial Class Window1
Inherits Window
Private _x As Double
Private _y As Double
Private _isDragging As Boolean
Public Sub New()
InitializeComponent()
End Sub
Private Sub OnDragStarted(ByVal sender As Object, ByVal e As DragStartedEventArgs)
_isDragging = True
_x = CDbl(GetValue(Canvas.LeftProperty))
_y = CDbl(GetValue(Canvas.TopProperty))
End Sub
Private Sub OnDragDelta(ByVal sender As Object, ByVal e As DragDeltaEventArgs)
' En dehors d'un drag and drop on sort
If Not _isDragging Then
Return
End If
' On récupère les nouvelles coordonnées
_x += e.HorizontalChange
_y += e.VerticalChange
myThumb.SetValue(Canvas.LeftProperty, _x)
myThumb.SetValue(Canvas.TopProperty, _y)
End Sub
Private Sub OnDragComplete(ByVal sender As Object, ByVal e As DragCompletedEventArgs)
_isDragging = False
End Sub
End Class
End Namespace |
Code de UserControl1.xaml :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
<UserControl x:Class="MonEspace.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:TEST_14.MonEspace">
<Grid>
<Rectangle
x:Name="MonRectangle"
Fill="AliceBlue"
Opacity="0.8"
maProprieteX="1234" Width="Auto"
Height="auto">
</Rectangle>
</Grid>
</UserControl> |
Code de UserControl1.xaml.vb :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Data
Imports System.Windows.Documents
Imports System.Windows.Input
Imports System.Windows.Media
Imports System.ComponentModel
Namespace MonEspace
''' <summary>
''' Interaction logic for UserControl1.xaml
''' </summary>
Public Partial Class UserControl1
Inherits UserControl
Implements INotifyPropertyChanged
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Public Shared ReadOnly maProprieteXProperty As DependencyProperty = DependencyProperty.Register("maProprieteX", GetType(Double), GetType(UserControl1))
Private xx As Double = 0
Public Sub New()
InitializeComponent()
End Sub
Public Property maProprieteX As Double
Get
Return xx
End Get
Set
If xx = value Then
Return
End If
xx = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("maProprieteX"))
End Set
End Property
End Class
End Namespace |
Je remercie par avance tous ceux qui pourront m'aiguiller vers une solution ! :)
Seb.