C# 如何保存/加载视图/单例类的属性
嘿,伙计们 我现在在我的程序中有一个小问题,这让我非常困扰 这里是我在程序中使用的单例类C# 如何保存/加载视图/单例类的属性,c#,wpf,view,singleton,viewmodel,C#,Wpf,View,Singleton,Viewmodel,嘿,伙计们 我现在在我的程序中有一个小问题,这让我非常困扰 这里是我在程序中使用的单例类 public class Resources { private static Resources _instance; public static Resources Instance { get { return _instance ?? (_instance = new Resources()); } } #region Properties
public class Resources
{
private static Resources _instance;
public static Resources Instance
{
get { return _instance ?? (_instance = new Resources()); }
}
#region Properties
public Candidate Candidate { get; set; }
public Enterprise Enterprise { get; set; }
public WikomContact WikomContact { get; set; }
public AMSContact AMSContact { get; set; }
#endregion
}
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="170" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Content="Enterprise" Margin="3" Foreground="White" Grid.Column="0"/>
<ComboBox ItemsSource="{Binding EnterpriseList, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
SelectedItem="{Binding Enterprise, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
DisplayMemberPath="Name"
IsEditable="True"
IsEnabled="{Binding EnterpriseIsEnabled, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
Margin="3" Grid.Column="1">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding RefreshViewCommand, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ComboBox>
</Grid>
我使用这些候选/Enterprise/…-对象作为组合框的ItemSources,这非常有效。
为了在其他ViewModel中也使用这些对象,我想将它们保存到一个Singleton类中,从那里我想将它们加载到所有其他ViewModel中
public _0InfoTalkViewModel()
{
_context = new WikomContext();
RefreshViewCommand = new RelayCommand(RefreshView);
PrintViewCommand = new RelayCommand(PrintView);
SaveViewCommand = new RelayCommand(SaveView);
EnterpriseIsEnabled = false;
WikomContactIsEnabled = true;
Candidate = Resources.Instance.Candidate;
Enterprise = Resources.Instance.Enterprise;
WikomContact = Resources.Instance.WikomContact;
}
下面是我在程序中使用的一个组合框
public class Resources
{
private static Resources _instance;
public static Resources Instance
{
get { return _instance ?? (_instance = new Resources()); }
}
#region Properties
public Candidate Candidate { get; set; }
public Enterprise Enterprise { get; set; }
public WikomContact WikomContact { get; set; }
public AMSContact AMSContact { get; set; }
#endregion
}
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="170" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Content="Enterprise" Margin="3" Foreground="White" Grid.Column="0"/>
<ComboBox ItemsSource="{Binding EnterpriseList, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
SelectedItem="{Binding Enterprise, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
DisplayMemberPath="Name"
IsEditable="True"
IsEnabled="{Binding EnterpriseIsEnabled, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
Margin="3" Grid.Column="1">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding RefreshViewCommand, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ComboBox>
</Grid>
在加载表单时也会触发RefreshView方法。
问题是,组合框从数据库获得正确的输入,但如果我选择其中一个,然后更改视图并再次加载,则SelectedValue不是我之前输入的值
有人知道我做错了什么吗?或者有人能告诉我为什么我的“想法/方法”不起作用吗
对不起,英语不好,我通常说德语 Snaylor
您的属性不应该是静态的,它们应该是实例属性:
public Candidate Candidate { get; set; }
public Enterprise Enterprise { get; set; }
public WikomContact WikomContact { get; set; }
public AMSContact AMSContact { get; set; }
引用singleton资源时,它应该是对实例的引用:
Candidate = Resources.Instance.Candidate;
Resources.Instance.Candidate = Candidate;
我不明白:您从未使用过
资源
的单例实例,只是它的静态属性。为什么不把资源
变成静态的呢?哦,是的,我明白了。。。我对单身汉不太熟悉,这就是我来这里的原因;)我现在把它改成了一个单例实例,但它仍然不起作用。。。还有什么想法吗?您根本不需要公共静态资源实例
。将Resource
声明为静态类,并按原样访问属性:Resource.Candidate
。例如,由于Candidate
是一个类名,而不是Candidate
类型的值(位于Resources.Instance.Candidate=Candidate
),因此您的代码不会按编写的方式编译。更新代码后,请编辑您的帖子。我的属性也被称为“候选者”;)这不好吗?这可能是我的错吗?等等,我试着给他们重新命名o//edit:尝试重命名我的属性,但效果不好->这不是我的错误。。。还有什么想法吗(@kjata30ah好的,很高兴知道,是的,我对单例不太熟悉…我现在把它改成了实例,但它仍然不起作用…还有其他想法吗?:o@Ibrahim Malluf你把你的属性从静态改成了我在代码中展示给你的实例了吗?很抱歉,我没有看到你的帖子,是的,我这样做了,仍然不起作用…我请重新阅读您的帖子,如果我现在理解正确的话,您希望您的单例类能够在不同的请求之间存活下来。这不会发生,因为状态未保存。您需要一种方法在请求之间保持状态。是的,我昨天已经解决了这个问题,我遇到了从我的viewmodel中的singleton类。我已将您的答案标记为“已接受”!感谢您的帮助!:)