我想调用一个简单的Command,它将我的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方法......
对不起我的英文:)
更新: 我得到一个nullreference异常,因为我的currentSpeech为null。 有没有办法在没有currentSpeech的情况下解决这个问题?
答案 0 :(得分:0)
怎么办
1.将TextBox.Text绑定到View模型属性
2.在Command Handler中使用View model属性。
在您的情况下,您已将TextBox.Text
绑定到CurrentSpeech.Title
,但使用this.Title
。
在您的命令中,将this.Title
更改为currentSpeech.Title
答案 1 :(得分:0)
你得到NullReferenceException的原因可能是因为它在属性本身中实例化了。当您终止绑定时,它会在该阶段创建属性。当它为NULL时绑定到属性。 IT实际上是在属性中创建的,但Binding永远不会知道。
首先,我会从属性中删除所有逻辑。 我还要在类中实现INotifyPropertyChanged,并在属性的“set”中调用PropertyChanged。这意味着UI将知道对该属性的任何更改。 然后我会为属性创建一个dependncency属性,如果它在任何绑定ot XAML中使用。
最后,我将在类的构造函数中实例化该命令。
逻辑不(在我的书中)属于属性。