我会保持简短的问题,因为我更愿意自己理解并实施,但如果您愿意,可以提供更多信息/代码。
我正在开发一个WPF应用程序来创建一个简单的Expense Tracker。现在我有一个XAML页面显示一个名为ExpenseEntry的对象的Observable Collection,后者又有四个元素:EntryDate,EntryCategory,EntryAmount和EntryComment。所有这四个,以及TempExpenseEntry和ExpenseList(Observable Collection)都声明是在页面的ViewModel.cs中使用private _variable,public变量(get; set)声明的,并且代码按照我希望的方式工作我要添加和组织条目。我还有一个名为EntryTotal的浮点数,它会在添加新条目时汇总所有EntryAmounts。
现在我想添加另一页进行分析。最终会有很多花里胡哨的东西但是现在我希望它只是容纳一个名为CategoryList的单独的Observable Collection,它可以观察/订阅第1页中的事件,并在添加新条目时执行一些操作。具体而言,该操作将检查是否存在CategoryName。如果是,则将CategoryAmount添加到总计中,如果不是,则将新条目添加到列表中。
对网站的研究以及与比我更了解情况的人进行咨询,这使得我使用单身人士这样的两个页面'视图模型可以看到ExpenseList。我找到了一个关于创建Singleton实例的教程,但找不到如何从我在Page 1的View Model上声明的公共/私有元素转移到Singleton共享多个页面的指南。应该在Singleton中实例化TempExpenseEntry和ExpenseList吗? CategoryList怎么样?这些变量是否在Singleton类中以相同的方式声明?第1页和第2页只有Singleton的实例吗?页面特定方法和事件订阅应该在哪里?
我非常感谢社群对此提出的一些指导。我喜欢四处寻找并通过自己的工作来学习具体细节,但是我可以在正确的方向上轻松推动。
希望收到你的来信,
Yusif Nurizade
答案 0 :(得分:-1)
如果没有一些代码,我很难帮助你(我觉得代码很复杂,这就是为什么你没有发布它),但无论如何,我建议你得到所有来自Page1
的静态代码,并将其放入一个新类(我们称之为类A
)但作为非静态代码。现在你要做的就是让类A
成为一个单例,任何东西都能够访问数据。
<强>更新强>
行。考虑到你的评论然后我会做这样的事情:
public class Singleton : DependencyObject, INotifyPropertyChanged
{
private static Singleton _Instance;
public static Singleton Instance
{
get
{
if (_Instance == null)
_Instance = new Singleton();
return _Instance;
}
}
//Dependency Property
public static readonly DependencyProperty PropertyA = DependencyProperty.Register("A", typeof(string), typeof(Singleton));
public string A
{
get { return GetValue(PropertyA).ToString(); }
set { SetValue(PropertyA, value); }
}
//Property
private int _B;
public int B
{
get { return _B; }
set
{
_B = value;
RaisePropertyChanged("B");
}
}
static Singleton()
{
Instance = new Singleton();
}
//INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new new PropertyChangedEventArgs(propertyName));
}
}
在这个课程中,您现在可以放置所有私有/公共属性。我甚至从DependencyObject
继承,以防你有DependencyProperties
。
然后在你的XAML上,你可以像这样绑定:
<TextBlock Text="{Binding Source={x:Static Singleton.Instance}, Path=A}"/>
OR
<TextBlock Text="{Binding Source={x:Static Singleton.Instance}, Path=B}"/>