2011-12-13 2 views
4

사용자 지정 클래스에 바인딩하는 데 문제가 있습니다. dependencyproperty는 내 viewmodel에서 올바른 값을 얻지 못하는 것 같습니다. 사용자 지정 클래스의 DependencyProperty에 바인딩

public class DataResource : DependencyObject 
     { 

      public static readonly DependencyProperty ContentProperty = 
       DependencyProperty.Register("Content", 
        typeof(object), 
        typeof(DataResource)); 

      public object Content 
      { 
       get { return (object)GetValue(ContentProperty); } 
       set { SetValue(ContentProperty, value); } 
      } 

     } 

그리고 내 UserControl을 자원이

, 나는이 :

<UserControl.Resources> 
     <local:DataResource x:Key="dataResource" Content="{Binding Test}"></data:DataResource> 
    </UserControl.Resources> 

"테스트"내 뷰 모델에서 내가 문제없이에 레이블을 결합 할 수있는 속성입니다 여기 내 사용자 정의 클래스입니다. 이 구현에서 내가 여기서 잘못된 것을하고 있습니까?

업데이트 : DependencyObject 대신 Freezable에서 상속하는 경우 작동합니다. 나는 왜, 잘하면 somone 이것을 설명 할 수 있는지 잘 모르겠습니다. Resources에는 컨텍스트가 없습니다

답변

3

DataResource 그렇게는 DataContext (가) (소스가 정의되지 않는 한 DataContext을 기준으로 함) 바인딩 완료되도록 상속 할 수 있습니다 어딘가에 UserControl에 배치 될 필요가있다.

+0

? 내 Resource 내에서 CollectionViewSource를 사용할 수 있으며 바인딩은 UserControl에 이미 DataContext가 설정되어 있기 때문에 잘 작동합니다. – dbomb7

+0

어쩌면 그 [상속 컨텍스트] (http://blogs.msdn.com/b/nickkramer/archive/2006/08/18/705116.aspx)를 통해 작동하지만, 나는 잘 모르겠다. 하지만 타입을'FrameworkElement'로 바꾸는 것은 확실한 방법이 아닙니다. 어떤 식 으로든 취할 수있는 올바른 단계는 아닙니다. 현재 DataContext에 바인딩 할 수 없기 때문에 'ElementName'이나'Source'와 같은 다른 소스를 사용하여 경로를 지정해야합니다. 해당 출처와 관련하여 –

0

당신은 또한 FrameworkElement를 사용할 수 있습니다 (그게 문제가 DependencyObject 심지어 당신이 운이 좋다면 비록 인공 상황이, FrameworkElement에 해당 속성이 속한으로 DataContext "진짜"를 필요가 없다는 것입니다) 코드 종속성 속성의 .SetBinding 메서드. 그런 다음 DataContext와 DP가 잘 섞이지 않기 때문에 전체 페이지에 대한 데이터 컨텍스트를 설정할 필요가 없습니다.

여기에 그에서 MSDN은 다음과 같습니다 http://msdn.microsoft.com/en-us/library/ms598273.aspx

샘플 : 나는 FrameworkElement에서 확장하는 내 DataResource 클래스를 변경하면, 난 여전히 문맥이없는

MyData myDataObject = new MyData(DateTime.Now);  
Binding myBinding = new Binding("MyDataProperty"); 
myBinding.Source = myDataObject; 
myText.SetBinding(TextBlock.TextProperty, myBinding); 
+0

어떻게 이것이 xaml에서 보입니까? – dbomb7

+0

이 메서드는 XAML 바인딩을 우회하는 데 사용됩니다. 바인드 충돌이나 사용자 컨트롤에서 onchanged를 제대로 트리거하지 않는 DP 때문에 Silverlight에서이 작업을 많이 끝냅니다. 그것은 가치가 있지만, 코드 뒤에 있어야합니다. – Xcalibur37

관련 문제