我有一个TextBox,Text内容具有绑定到View Model的数据。 我需要将TextBox中的不同字符串保存到一个集合,但似乎它总是将最后一个当前TextBox的文本复制到所有项目。虽然每次我输入不同的文字。
以下是XAML中的代码:
<TextBox HorizontalAlignment="Left"
Background="Transparent"
Margin="0,81,0,0"
TextWrapping="Wrap"
Text="{Binding Note.NoteTitle, Mode=TwoWay}"
VerticalAlignment="Top"
Height="50" Width="380"
Foreground="#FFB0AEAE" FontSize="26"/>
在视图模型中,我有:
public Note Note
{
get { return _note; }
set { Set(() => Note, ref _note, value); }
}
private ObservableCollection<Note> _notes;
public async void AddNote(Note note)
{
System.Diagnostics.Debug.WriteLine("AddNote Called...");
_notes.Add(note);
}
我的页面中有一个按钮,点击它时会调用AddNote。
是否有解决方案我可以将不同的项目保存到_notes?
编辑: 更多信息:AddNote为异步的原因是我需要在里面调用另一个任务来保存笔记数据:
private async Task saveNoteDataAsync()
{
var jsonSerializer = new DataContractJsonSerializer(typeof(ObservableCollection<Note>));
using (var stream = await ApplicationData.Current.LocalFolder.OpenStreamForWriteAsync(fileName,
CreationCollisionOption.ReplaceExisting))
{
jsonSerializer.WriteObject(stream, _notes);
}
}
答案 0 :(得分:1)
您正在尝试反复推送相同的Note对象实例。 AddNote命令应该只接受字符串参数并在添加之前创建一个新的注释。
<TextBox HorizontalAlignment="Left"
Background="Transparent"
Margin="0,81,0,0"
TextWrapping="Wrap"
Text="{Binding NoteTitle, Mode=TwoWay}"
VerticalAlignment="Top"
Height="50" Width="380"
Foreground="#FFB0AEAE" FontSize="26"/>
private string _NoteTitle;
public string NoteTitle
{
get { return _NoteTitle; }
set { _NoteTitle= value; }
}
private ObservableCollection<Note> _notes;
public async void AddNote(string NoteName)
{
System.Windows.Threading.Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() =>
{
System.Diagnostics.Debug.WriteLine("AddNote Called...");
_notes.Add(new Note() {NoteTitle = NoteName});
});
// your async calls etc.
}