2011-05-02 6 views
1

컨트롤의 동작을 추적하려고하는 동작이 있으며 해당 동작을 내 ViewModel에서 읽으려고합니다. XAML에서 System.Windows.Interactivity.Behavior에 바인딩 할 수 있습니까?

은 현재 내가이 일을 해요 :

<MyControl> 
     <i:Interaction.Behaviors> 
      <b:MyBehavior /> 
     </i:Interaction.Behaviors> 
    </MyControl> 

내가 XAML에서 인스턴스화보다 뷰 모델 또는 응용 프로그램의 다른 부분의 속성으로 행동하지 않고 결합 할 수있는 방법이 있나요? 구문은 무엇입니까?

답변

2

동작은 순수 UI 개념이므로 ViewModel은 그것에 대해 아무 것도 알지 못합니다. 그러나 바인딩을 통해 동작 업데이트를 ViewModel의 속성으로 만들 수 있습니다. 그냥 행동에 종속성 속성을 선언하고 다음과 같이 바인딩 :

+0

그것은 좋은 생각

<MyControl> <i:Interaction.Behaviors> <b:MyBehavior MyProperty="{Binding MyViewModelProperty, Mode=OneWayToSource}" /> </i:Interaction.Behaviors> </MyControl> 

(이 과정의 의미가 있다면 당신은 또한 TwoWay 바인딩을 사용할 수 있습니다)하지만, 행동은 이미 행동에서 상속 DependencyObject에서 상속받을 수 없습니다. –

+2

@Done Monego, [동작이 DependencyObject에서 이미 상속] (http://msdn.microsoft.com/en-us/library/system.windows.interactivity.behavior%28v=expression.40%29.aspx) ... –

+1

Levensque - oof. 다시 한 번 감사드립니다 - "A 'Binding은 DependencyObject의 DependencyProperty에만 설정할 수 있습니다." –

0

대부분의 논리는 Interactivity입니다. 예를 들어 첨부 된 속성 TriggersBehaviors은 모두 비공개입니다. Interaction 클래스는 비헤이비어와 트리거를 가져 오는 메소드 만 제공하며 설정 메소드가 없습니다. 적어도 기존 클래스를 사용하면 할 수있는 일이 많다는 것을 정말로 의심합니다.

this question on how to set bahaviors in a style 아마도 이것을 실현하는 방법을 알려줄 수 있습니다.

관련 문제