■ WPF #4:ボタンの名称をTriggerで変更するには?

Modelの状態によってDataTriggerを使いボタンの名称を変更させるには?
前回記事:WPF #3:DataGridで日付書式を整形するには?


例:
■ Mode.vb
Imports System.ComponentModel

Public Class Model
    Implements INotifyPropertyChanged

    Private _Checked As Boolean = False
    Public Property Checked As Boolean
        Get
            Return _Checked
        End Get
        Set(value As Boolean)
            If (_Checked <> value) Then
                _Checked = value
                RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Checked"))
            End If
        End Set
    End Property

    Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged

End Class
  
■ ClickCommand.vb
Public Class ClickCommand
  Implements ICommand

  Private _Model As Model

  Public Sub New(inModel As Model)
      _Model = inModel
  End Sub

  Public Event CanExecuteChanged As EventHandler Implements ICommand.CanExecuteChanged

  Public Sub Execute(parameter As Object) Implements ICommand.Execute
      _Model.Checked = _Model.Checked Xor True
  End Sub

  Public Function CanExecute(parameter As Object) As Boolean Implements ICommand.CanExecute
      Return True
  End Function

End Class
  
■ ViewModel.vb
Public Class ViewModel

  Public ReadOnly Property Model As New Model()

  Public ReadOnly Property Click As New ClickCommand(Model)

End Class
  
■ MainWindow.xaml
 :
<Canvas>
    <Button x:Name="button" Content="{Binding Model.Checked}" Canvas.Left="60" Canvas.Top="46" Width="75" />
    <Button x:Name="button1" Content="Button" Canvas.Left="194" Canvas.Top="46" Width="75" Command="{Binding Click}" />
</Canvas>
 :
  
■ MainWindow.xaml.vb
Class MainWindow

  Private _ViewModel As New ViewModel()

  Public Sub New()

      ' この呼び出しはデザイナーで必要です。
      InitializeComponent()

      ' InitializeComponent() 呼び出しの後で初期化を追加します。
      DataContext = _ViewModel

  End Sub

End Class
  

プログラムを実行するとボタンが2つ表示され、右型のボタンをクリックすると、左側ボタンの表示名が "True" → "False" … と変化する。

これをDataTriggerで "はい" → "いいえ" … と表示するようにしたい。

→ MainWindow.xamlを以下のように修正
■ MainWindow.xaml
 :
<Window.Resources>
  <Style TargetType="Button" x:Key="YesNoStyle">
      <Setter Property="Content" Value="いいえ" />
      <Style.Triggers>
          <DataTrigger Binding="{Binding Model.Checked}" Value="True">
              <Setter Property="Content" Value="はい" />
          </DataTrigger>
      </Style.Triggers>
  </Style>
</Window.Resources>

<Canvas>
  <Button x:Name="button" Style="{StaticResource YesNoStyle}" Canvas.Left="60" Canvas.Top="46" Width="75" />
  <Button x:Name="button1" Content="Button" Canvas.Left="194" Canvas.Top="46" Width="75" Command="{Binding Click}" />
</Canvas>
 :
  

これで目的通りの動作となった。



次回記事:WPF #5:ウインドウを画面中央に表示するには?


WPF学習, DataTrigger

0 件のコメント:

その他の記事