2011-04-18 6 views
3

가능한 경우 Silverlight에서 MVVM viewmodel의 속성에 애니메이션을 적용하는 방법에 대해 묻고 싶습니다. 예를 들어, 나는 여기 XAML에서 전형적인 스토리 보드 선언이 :방법 : Silverlight 4에서 MVVM ViewModel 속성에 애니메이션을 적용 하시겠습니까?

이제
<DoubleAnimation 
        Storyboard.TargetName="yearSlider" 
        Storyboard.TargetProperty="Value" 
        From="1990" To="2012" Duration="0:0:8" /> 

, 내가 대신에 CLR (비 의존성) 속성을 "년도"애니메이션을 적용 할 생각 대신 슬라이더 yearSlider에 Value 속성을 애니메이션을 내 MVVM viewmodel. 물론

<DoubleAnimation 
        Storyboard.BindingSource="{Binding}" 
        Storyboard.TargetProperty="Year" 
        From="1990" To="2012" Duration="0:0:8" /> 

스토리 보드에 이런 "BindingSource에"속성이없는, 그러나 이것은 내가 노력하고있어 설명 도움이 될 것입니다 내의 ViewModel이 DataContext에 설정되어있는 경우 예를 들어, 가설 적으로 볼 수있는 코드는 다음과 할 것.

코드 숨김에 코드를 추가하지 않고 MVVM viewmodel 속성을 애니메이션화하는 작업을 수행하기위한 메커니즘이 Silverlight 4에 있습니까?

답변

4

예. 당신은 이것을 할 수 있습니다.

MVVM의 속성은 일반 속성이 아닌 종속성 속성이어야합니다. 따라서 MVVM은 DependencyObject에서 상속해야하며 애니메이션으로 만들 수있는 종속성 속성을 만들 수 있습니다.

public class MyViewModel : DependencyObject 
{ 
    public static readonly DependencyProperty YearProperty = 
    DependencyProperty.Register(
    "Year", typeof(int), 
    typeof(MyViewModel), null 
    ); 

    public int Year 
    { 
    get { return (int)GetValue(YearProperty); } 
    set { SetValue(YearProperty, value); } 
    } 
} 

그리고 다음 XAML은 다음과 같이 보일 것이다 :

<DoubleAnimation 
    Storyboard.Target="{Binding}" 
    Storyboard.TargetProperty="Year" 
    From="1990" To="2012" Duration="0:0:8" /> 

것을 시도하고 작동하는지 알려주세요.

그렇지 않은 경우 DoubleAnimation과의 바인딩을 충족시키는 방법을 알아낼 때까지 주변을 둘러 보시기 바랍니다. 우리는 "DataContext.Year"을 수정하는 방법

<TextBlock x:Name="YearLabel" Text="{Binding Year}" /> 
<DoubleAnimation 
    Storyboard.TargetName="YearLabel" 
    Storyboard.TargetProperty="DataContext.Year" 
    From="1990" To="2012" Duration="0:0:8" /> 

주의 사항 : 어쩌면 당신은 범위 내에서 다른 요소의 오프 다시 피기 수 있습니다. TextBlock 일 필요는 없습니다. 예를 들어, RootLayout Grid와 같은 이름을 가진 요소가 될 수 있습니다.

+0

XAML이 어떻게 표시되는지, 즉 DoubleAnimation 선언을 표시 할 수 있습니까? –

+0

대상 속성을 설정할 때 다음 오류가 발생합니다. 오류 '대상'속성이 '네임 스페이스'XML 네임 스페이스 'http://schemas.microsoft.com/winfx/2006/xaml/presentation '을 참조하십시오. –

+0

다른 방법으로 바인딩했습니다. 애니메이션은 매우 민감 할 수 있으므로 실제 뷰 모델을 얻으려면 다른 기술을 시도해야 할 수도 있습니다. – Laith

관련 문제