2009-12-17 3 views
0

사용자 지정 컨트롤의 종속성 속성에 FindAncestor 바인딩은 DependencyProperty MyString의WPF 내가 가진 사용자 정의 WPF 컨트롤을 가지고

내가보기에 ItemsControl에 내 컨트롤을 사용하여으로부터 값을 물고기 싶어 해요 ViewModel

컨트롤의 DataContext는 ItemsControl의 ItemsSource에서 각 항목이 될 때마다 FindAncestor를 사용할 수 있다고 생각했지만 dosnt가 작동하는 것처럼 보였습니다 ... 누군가 내가 잘못 가고있는 것을 볼 수 있습니까?

보기에을 heres XAML ...

<Grid> 
    <ItemsControl ItemsSource="{Binding MyItems}" > 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal" Name="myStack"> 
        <ImportExceptions:ControlStrip MyString="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ItemsControl}}, Path=DataContext.MyStringOnViewModel}" /> 
       </StackPanel> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 

    </ItemsControl> 
</Grid> 

을 heres 내 종속성 속성을 설정 한 내 사용자 지정 컨트롤 뒤에 코드 ...의

public partial class ControlStrip 
{ 

    public ControlStrip() 
    { 
     InitializeComponent(); 
    } 

    public string MyString 
    { 
     get 
     { 
      return GetValue(MyStringProperty).ToString(); 
     } 
     set 
     { 
      SetValue(MyStringProperty, value); 
     } 
    } 

    public static readonly DependencyProperty MyStringProperty = 
     DependencyProperty.RegisterAttached("MyString", typeof (string), typeof (ControlStrip)); 


} 

답변

1

귀하의 코드처럼 단순히 뷰 모델에 직접 MyString의 속성을 결합 할 수 있어야한다, 좋아 보인다. DataContext 참조에서 오류가 발생했을 수 있습니다. 아마도 ItemsControl의 DataContext는 이미 MyStringOnViewModel입니다. 따라서 Path 특성의 DataContext 다음에 .MystringOnViewModel을 생략하십시오. 더 많은 코드를 제공 할 수 없다면 DataCon, text (s)가 어떻게 설정되는지를 모방 한 단순화를 게시하십시오.

+0

나는 그것이 넥타이라고 생각 했는가? ;) – kiwipom

+0

DataContext 참조에서 오류가 발견 된 것으로 의심됩니다. 당신의 도움을 주셔서 감사합니다 –

3

DataContext를 컨트롤은 변경되지 않습니다. ImportExceptions:ControlStrip의 DataContext는 (명시 적으로 지정하지 않으면) 사용 가능한 다음 DataContext가됩니다.

I infer fr 톰은 속성 'MyItems'와 'MyStringOnViewModel'와 뷰 모델에보기의 DataContext를 설정 한 코드 -

<ImportExceptions:ControlStrip MyString="{Binding Path=MyStringOnViewModel}" /> 
+0

나는 당신을 두들겨 두렵다 ;-) – Dabblernl

관련 문제