0

私はmvvmパターンをたどろうとしています。galasoft EventToCommandを使用すると、次のエラーが発生します。「GalaSoft.MvvmLight.Command.RelayCommand.RelayCommand(System.Action)」に最もよく一致するオーバーロードされたメソッドには、いくつかの無効な引数があります。

XAMLからのコード:

<toolkit:DatePicker Header="Select Date" 
     ValueStringFormat="{}{0:D}"                                    
     HorizontalAlignment="Left" Margin="0,126,0,0" 
     Name="datePicker1" 
     VerticalAlignment="Top" FontFamily="Verdana"  
     FontSize="22" Width="450">
     <i:Interaction.Triggers>
          <i:EventTrigger EventName="ValueChanged">
               <cmd:EventToCommand PassEventArgsToCommand="True"
                     Command="{Binding DateSelection}"/>
          </i:EventTrigger>
     </i:Interaction.Triggers>
</toolkit:DatePicker>

モデルビューで:

  public MainViewModel()
    {
        DateSelection = new RelayCommand<DateTimeValueChangedEventArgs>(time_Call);
    }

    public RelayCommand<DateTimeValueChangedEventArgs> DateSelection
    {
        get;
        set;
    }
    void time_Call(object sender, DateTimeValueChangedEventArgs e)
    {

    }

私は空白です!

4

1 に答える 1

0

代わりに、Valueプロパティに双方向でバインドできますか?これにより、処理が簡素化され、XAMLおよびMVVM...バインディングの真の力を使用できるようになります。

<toolkit:DatePicker Header="Select Date" 
     ValueStringFormat="{}{0:D}"                                    
     HorizontalAlignment="Left" Margin="0,126,0,0" 
     Name="datePicker1" 
     VerticalAlignment="Top" FontFamily="Verdana"  
     FontSize="22" Width="450"
Value={Binding SelectedDate, Mode=TwoWay}" />

ビューモデル

  private DateTime selectedDate;
    public DateTime SelectedDate
    {
        get
        {
          return this.selectedDate;
        }

        set
        {
          if (this.selectedDate != value)
          {
            this.selectedDate = value;
            this.RaisePropertyChanged("SelectedDate");
          }
        }
    }

    public MainViewModel()
    {
// initialize to today being selected
this.SelectedDate = DateTime.Now;
// the property changed might not be necessary if you are just trying to get the new value
    this.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(MainViewModel_PropertyChanged);
    }

    void MainViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
    {
      if(e.PropertyName="SelectedDate")
    {
    // do something if needed
    }
    }
于 2012-05-30T15:56:31.477 に答える