2013-03-11 4 views
0

(WPF MVVM) 내 자신의 스타일과 ContentTemplate-> StaticResource-> DataTemplate의 조합을 사용하여 일시 중지/재생 단추를 만들려고합니다. DataTemplate을 벡터 그래픽 데이터로 설정했습니다. 나는 Pause-Button과 Play-Button을위한 2 개의 벡터 그래픽을 준비했다. 내 대상 : 일시 중지 단추를 클릭하면 ContentTemplate이 Play-Button-DataTemplate로 "전환"되고 단추가 재생 단추가됩니다. 단추의 Click 이벤트를 바인딩하거나 RelayCommand를 사용하여 일시 중지/재생 작업 (코드 예제에서 Click 이벤트를 바인딩하지 않음)을 사용해야한다는 것을 알고 있지만 잘 모르겠습니다. ContentTemplate을 바인딩하는 방법 내가 필요한 효과를 얻으십시오. 미리 감사드립니다.WPF MVVM ContentTemplate을 동적으로 바인딩하는 방법

<controls:MyButton x:Name="btnPause" AutomationProperties.Name="btnPause" Style="{StaticResource MyButtonStyle}" ContentTemplate="{StaticResource dtmpPause}" /> 

<DataTemplate x:Name="dtmpPause"> 
     <Path x:Name="pathPause" Fill="White" Stretch="Uniform" Data="M314.00598,126.271 L379.52698,126.271 L379.52698,440.672 L314.00598,440.672 z M187.40198,126.271 L252.92398,126.271 L252.92398,440.672 L187.40198,440.672 z M283.45901,34.240997 C146.03,34.240997 34.229004,146.043 34.229004,283.45697 C34.229004,420.88702 146.03,532.70099 283.45901,532.70099 C420.88699,532.70099 532.70203,420.88702 532.70203,283.45697 C532.70203,146.043 420.88699,34.240997 283.45901,34.240997 z M283.45901,0 C439.772,0 566.92999,127.158 566.92999,283.45697 C566.92999,439.771 439.772,566.94299 283.45901,566.94299 C127.15799,566.94299 0,439.771 0,283.45697 C0,127.158 127.15799,0 283.45901,0 z"/> 
</DataTemplate> 

<DataTemplate x:Name="dtmpPlay"> 
    <Path x:Name="pathPlay" Fill="White" Stretch="Uniform" Data="M269.00003,121.50002 L298.00003,121.50002 L298.00003,445.50003 L269.00003,445.50003 z M283.5,41.621429 L41.620132,283.50198 L283.5,525.37958 L525.37982,283.50198 z M283.5,0 L566.99994,283.50198 L283.5,567 L0,283.50198 z"/> 
</DataTemplate> 

답변

1

DataTemplateSelector를 사용하면 원하는대로 구현 한 정의 된 조건에 따라 원하는 DataTemplate을 선택할 수 있습니다.

public class TaskListDataTemplateSelector : DataTemplateSelector 
{ 
    public override DataTemplate 
     SelectTemplate(object item, DependencyObject container) 
    { 
     FrameworkElement element = container as FrameworkElement; 

     if (element != null && item != null && item is Task) 
     { 
      Task taskitem = item as Task; 

      if (taskitem.Priority == 1) 
       return 
        element.FindResource("importantTaskTemplate") as DataTemplate; 
      else 
       return 
        element.FindResource("myTaskTemplate") as DataTemplate; 
     } 

     return null; 
    } 
} 

당신이 당신의 DataContext가 무슨 우선 순위에 따라 원하는대로 DataTemplate을 당신은 반환이 예제 : 여기

은 예입니다.

XAML에서 당신은 DataTemplateSelector 그것이 무엇을 사용해야 컨트롤을 이야기해야합니다 :이 경우 myDataTemplateSelector에서

<ListBox Width="400" Margin="10" 
     ItemsSource="{Binding Source={StaticResource myTodoList}}" 
     ItemTemplateSelector="{StaticResource myDataTemplateSelector}" 
     HorizontalContentAlignment="Stretch"/> 

는 목록 상자에서 사용됩니다.

귀하의 경우 해당 MyButton.

관련 문제