2013-04-07 2 views
1

사용자 지정 컨트롤을 만들었으며 XAML에서 사용자 지정 컨트롤의 Observable 컬렉션에있는 항목의 속성에 제대로 바인딩하는 방법을 알고 싶습니다. 사용자 정의 컨트롤 속성은 다음과 같습니다.XAML 사용자 지정 컨트롤에 바인딩

Public Property MyPoints As ObservableDependencyObjectCollection(Of MyPoint) 
    Get 
     Return CType(GetValue(MyPointsProperty), ObservableDependencyObjectCollection(Of MyPoint)) 
    End Get 
    Set(value As ObservableDependencyObjectCollection(Of MyPoint)) 
     SetValue(MyPointsProperty, value) 
    End Set 
End Property 

MyPoint이 두 가지 속성의 X를 포함하고 Y

전체 XAML

<Window x:Class="MainWindow" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="MainWindow" Height="350" Width="525" xmlns:my="clr-namespace:WpfDependencyPropertyVB"> 

<Grid> 
    <my:CustomControl1 HorizontalAlignment="Left" Margin="322,212,0,0" x:Name="CustomControl11" VerticalAlignment="Top" Width="145" Height="67"> 
     <my:CustomControl1.MyPoints> 
      <my:MyPoint X="100" Y="{Binding Value, ElementName=Slider1}" /> 
     </my:CustomControl1.MyPoints> 
    </my:CustomControl1> 
    <Slider Height="26" HorizontalAlignment="Left" Margin="23,174,0,0" Name="Slider1" VerticalAlignment="Top" Width="273" /> 
    <Label Content="{Binding Value, ElementName=Slider1}" Height="41" HorizontalAlignment="Left" Margin="329,145,0,0" Name="Label1" VerticalAlignment="Top" Width="135" /> 
</Grid> 

여기

내 XAML에서 코드 설정 외모과 같이 입력 :

<my:CustomControl1 x:Name="CustomControl11" > 
    <my:CustomControl1.MyPoints> 
     <my:MyPoint X="100" Y="{Binding Value, ElementName=Slider1}" /> 
    </my:CustomControl1.MyPoints> 
</my:CustomControl1> 

컨트롤에 중단 점을 설정하면 X = 100이지만 슬라이더 값이 변경 될 때 Y가 업데이트되지 않는다는 것을 알 수 있습니다.

도움을 주시면 감사하겠습니다.

+0

확인 Visual Studio 출력 창. 거기에 바인딩 오류가 표시 될 수 있습니다. –

+0

맞습니다. 그러나 나는 올바르게 바인딩하는 방법을 분발하지 않습니다. BindingExpression : Path = Value; DataItem = null; 대상 요소가 'MyPoint'(HashCode = 16014678)이고 대상 속성이 'System.Windows.Data Error : 2 : 대상 요소에 대한 FrameworkElement 또는 FrameworkContentElement를 찾을 수 없습니다. Y '('Double '을 입력하십시오.) – Paul

+0

전체 XAML을 게시하십시오 (슬라이더 등 포함). –

답변

0

내 솔루션은 종속성 속성 ThePointCustomControl1에 추가 한 다음 슬라이더 값을 ThePoint.Y에 바인딩하는 것입니다. MyPoint는 DependencyObject에서 파생되었으며 X와 Y는 종속성 속성이라고 가정합니다.

<my:CustomControl1 x:Name="theControl" /> 

<Slider Grid.Row="1" Value="{Binding ElementName=theControl, 
     Path=ThePoint.Y, Mode=TwoWay}"/> 

필요에 따라 컬렉션에 항목을 추가하는 데 필요한대로 PropertyChangedCallback 처리기를 추가 할 수 있습니다 (필요한 경우).

또는 당신이 컬렉션의 항목에 바인딩 할 수 있습니다

<local:MyCustomControl x:Name="theControl" /> 

<Slider Grid.Row="1" Value="{Binding ElementName=theControl, 
     Path=MyPoints[0].Y, Mode=TwoWay}" /> 
+0

Hello Phil 필자는 컬렉션에 여러 항목을 추가하고 각 항목 Y 속성에 바인딩 할 수 있어야합니다. MyPoint는 컬렉션의 단 하나 항목입니다. 귀하의 솔루션을 올바르게 이해하는 경우 내 컨트롤은 한 항목에 대한 Y 속성을 바인딩 할 수 있습니다. – Paul

+0

추가 된 내용 – Phil

+0

Hello Phil- 그게 훌륭합니다! 슬라이더에있는 내 맞춤 제어 장치에서 제 바인딩을 설정할 수있는 방법을 아십니까? 내가 게시 한 것과 비슷한 것. – Paul

관련 문제