0

GUI からデータベースに値を追加する単純なコマンドを呼び出したいと思います。

私の命令:

private ICommand addSpeechCommand;
public ICommand AddSpeechCommand
{
  get
  {
    if (addSpeechCommand == null)
    {
      addSpeechCommand = new RelayCommand(param => AddSpeech());
    }
    return addSpeechCommand;
  }
}

public void AddSpeech()
{
  // TODO add 
OrganizerBL.InsertSpeech(new Speech(maxSpeechId, currentSpeech.Title, currentSpeech.Summary, currentSpeech.Start, currentSpeech.End, currentSpeech.TrackId, currentSpeech.SpeakerId, currentSpeech.ConferenceId, currentSpeech.Room));
  this.LoadSpeeches();
}

-- このコメントアウトされた行は、データグリッドの行が選択されたときにどのように処理したかを示しています。しかし、currentSpeechなしで動作させたい

私のXAML:

        <Label x:Name ="lblTitle" Content="Title"/>
        <TextBox x:Name="txtTitle" Text="{Binding CurrentSpeech.Title, Mode=TwoWay}" Margin="2,144,0,0" Height="20" VerticalAlignment="Top"/>

そして他のテキストボックス...

コマンドからテキストボックスの値にアクセスしてinsertSpeechメソッドを呼び出す方法が本当にわかりません...

私の英語でごめんなさい:)

更新: currentSpeech が null であるため、nullreference 例外が発生します。currentSpeech なしでこれを解決する方法はありますか?

4

2 に答える 2

0

NullReferenceException を取得する理由は、おそらくプロパティ自体でインスタンス化されているためです。バインディングを作成すると、その段階でそのままプロパティに作成されます。また、NULL の場合はプロパティにバインドします。IT は実際にはプロパティ内で作成されますが、Binding はそれを認識しません。

まず、プロパティからすべてのロジックを削除します。また、クラスに INotifyPropertyChanged を実装し、プロパティの「セット」で PropertyChanged を呼び出します。これは、UI がプロパティへの変更を認識することを意味します。次に、XAML のバインディングで使用されている場合は、プロパティの依存関係プロパティを作成します。

最後に、クラスのコンストラクターでコマンドをインスタンス化します。

ロジックは (私の本では) プロパティに属していません。

于 2012-12-26T22:58:17.270 に答える
0

方法
1. TextBox.Text を View モデル プロパティにバインドします
。 2. コマンド ハンドラで View モデル プロパティを使用します。


あなたの場合、にバインドTextBox.TextしましCurrentSpeech.Titleたが、を使用していthis.Titleます。

あなたのコマンドで、に変更this.TitleしますcurrentSpeech.Title

于 2012-12-26T18:27:41.183 に答える