Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Uwpでみるxaml入門第二回

1,904 views

Published on

2016年8月27日のドットネットラボ勉強会のスライド資料です。

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Uwpでみるxaml入門第二回

  1. 1. <ButtonText= “hoge”/> 以下は等価 Button btn = new Button(); btn.Content = "hoge";
  2. 2. DEMO:TemplateSample
  3. 3. 作戦1:テンプレートを編集する 作戦2:自作してしまう
  4. 4. イベントハンドラー XAMLからコードビハインドのメソッドを呼び出す
  5. 5. プログラミングのプロパティと XAMLのプロパティを紐付ける 疎結合 This.textbox.text = “ほげ”; が不要になる。 XAMLのプロパティ同士も紐付けれる
  6. 6. DEMO
  7. 7. <TextBlockText="{Binding name, Mode=OneWay}" >
  8. 8. INotifyPropertyChanged = 変更を通知する仕組み public class ViewModelBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void NotifyPropertyChanged(String propertyName = "") { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } }
  9. 9. INotifyPropertyChangedって面倒じゃね? という人は ReactivePropertyを調べると幸せになれるかも
  10. 10. 例えば、コントロールの表示非常時を データバインディングする場合は・・・ VisibilityをViewModelで持つのもなぁ・・・
  11. 11. だめなやつ・・・ public class MainPageViewModel : ViewModelBase { private Visibility _visibility; public Visibility visibility { get { return _visibility; } set { _visibility = value; this.NotifyPropertyChanged("visibility"); } }
  12. 12. IValueConverter で型をコンバート public class BoolToVisibilityConverter : IValueConverter { public object Convert(object value,Type targetType, object parameter, string language) { // valueがfalseならCollapsedを返す if (value is bool && (bool)value != false) { return (IsInvert) ?Visibility.Visible :Visibility.Collapsed; } return (IsInvert) ?Visibility.Collapsed :Visibility.Visible; } public object ConvertBack(object value,Type targetType, object parameter, string language) { throw new NotImplementedException(); }
  13. 13. X:Bind UWPから追加。 Datacontextではなくコードビハインドにバインド できる コンパイル時にエラーが出る
  14. 14. データバインディングが生きてくるのは 配列やコレクションなどのリストデータを扱う場合 DEMO:ListDataBinding
  15. 15. アニメーションもXAMLで定義可能 編集はタイムライン方式(Adobe Flashもそう) アニメーションもXAMLで表現 DEMO:AnimationSample
  16. 16. ・・・まぁ、読むのも難しいし、手打ちだと書けないよね・・・ <Storyboard x:Name="Storyboard1"> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransf <EasingDoubleKeyFrame KeyTime="0"Value="0"/> <EasingDoubleKeyFrame KeyTime="0:0:1"Value="208"/> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransf <EasingDoubleKeyFrame KeyTime="0"Value="0"/> <EasingDoubleKeyFrame KeyTime="0:0:1"Value="-156"/> </DoubleAnimationUsingKeyFrames> </Storyboard>
  17. 17. フレームワークとかツールがほぼ必須 MVVMならPrismかmvvmlight XAML周りはXamlToolkit 機会があったら次回にでも・・・
  18. 18. データバインディングは便利だけど 覚えることがいろいろある。

×