我正在使用DataForm。到目前为止,我已经找到了两种方法来指定它的当前项:静态资源,或者在后面的代码中。
代码背后的初始化:
expenseDataForm.CurrentItem = new ExpenseInfo();
保存条目:
private void expenseDataForm_EditEnded(object sender, DataFormEditEndedEventArgs e)
{
if (e.EditAction.Equals(DataFormEditAction.Commit))
{
// cast `sender` instead of hardcoding it to expenseDataForm?
expenses.Add(expenseDataForm.CurrentItem as ExpenseInfo);
expenseDataForm.CurrentItem = new ExpenseInfo();
}
}
改为使用资源:
<local:ExpenseInfo x:Key="newExpense"/>
<!-- ... -->
<df:DataForm CurrentItem="{StaticResource newExpense}" ... />
然后,当我去保存时,我遇到了问题:
private void expenseDataForm_EditEnded(object sender, DataFormEditEndedEventArgs e)
{
if (e.EditAction.Equals(DataFormEditAction.Commit))
{
// cast `sender` instead of hardcoding it to expenseDataForm?
expenses.Add(expenseDataForm.CurrentItem as ExpenseInfo);
LayoutRoot.Resources["newExpense"] = new ExpenseInfo(); // crashes here
}
}
这在风格上是错误的吗?我已经读过静态资源应该通过应用程序存活,尽管这些费用信息对象显然不会。我应该采用代码隐藏的路线吗?
答案 0 :(得分:1)
崩溃是因为您无法使用现有密钥为资源字典分配值。他们不支持替换。
您需要先致电LayoutRoot.Resources.Remove("newExpense")
。然后你可以分配一个新的值。
在更广泛的问题上,你应该真正研究MVVM pattern。然后,当前选择将成为ViewModel的属性。建议不要使用资源来存储数据。代码背后是一个非常小的改进,但仍然有问题。