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 为空。有没有办法在没有 currentSpeech 的情况下解决这个问题?

4

2 回答 2

0

怎么做
1. 将 TextBox.Text 绑定到视图模型属性
2. 在命令处理程序中使用视图模型属性。


在您的情况下,您已绑定TextBox.TextCurrentSpeech.Title,但使用this.Title.

在您的命令中,更改this.TitlecurrentSpeech.Title

于 2012-12-26T18:27:41.183 回答
0

您得到 NullReferenceException 的原因可能是因为它在属性本身中被实例化。当您创建绑定时,它会在该阶段创建到属性。当它为 NULL 时,您将绑定到该属性。IT 实际上是在属性内部创建的,但绑定永远不会知道这一点。

首先,我会从属性中删除所有逻辑。我还将在类中实现 INotifyPropertyChanged,并在属性的“集合”中调用 PropertyChanged。这意味着 UI 将知道该属性的任何更改。然后,如果它在任何 Binding ot XAML 中使用,我将为该属性创建一个依赖属性。

最后,我将在类的构造函数中实例化该命令。

逻辑(在我的书中)不属于属性。

于 2012-12-26T22:58:17.270 回答