2011-09-16 15 views

答えて

4

IResultを使用します。 sample code 編集:ブール値に基づいて、このシナリオを記述するとサンプルを変更できます。

ビュー:

<Grid> 
     <MediaElement AutoPlay="False" 
         Source="../Assests/Kalimba.mp3"></MediaElement> 
     <Button x:Name="Play" 
       Content="Play" 
       Height="50" 
       Width="150" /> 
    </Grid> 

のViewModel:

public class MediaViewModel : Screen 
    { 
     public MediaViewModel() 
     { 
      DisplayName = "Media Sample"; 
     } 

     public IEnumerable<IResult> Play() 
     { 
      var result = new PlayMediaResult(); 
      yield return result; 
     } 
    } 

PlayMediaResult:

public class PlayMediaResult : IResult 
    { 
     public void Execute(ActionExecutionContext context) 
     { 
      var view = context.View as FrameworkElement; 
      var mediaElement = FindVisualChild<MediaElement>(view); 

      if (mediaElement != null) 
      { 
       mediaElement.Play(); 
       Completed(this, new ResultCompletionEventArgs {}); 
      } 

      Completed(this, new ResultCompletionEventArgs {}); 
     } 

     public event EventHandler<ResultCompletionEventArgs> Completed; 

     public static TChildItem FindVisualChild<TChildItem>(DependencyObject obj) 
      where TChildItem : DependencyObject 
     { 
      for (var i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) 
      { 
       var child = VisualTreeHelper.GetChild(obj, i); 
       if (child != null && child is TChildItem) 
        return (TChildItem) child; 

       var childOfChild = FindVisualChild<TChildItem>(child); 
       if (childOfChild != null) 
        return childOfChild; 
      } 
      return null; 
     } 
    } 
} 
関連する問題