如何从/向View / Singleton-Class保存/加载属性

时间:2016-12-21 18:52:34

标签: c# wpf view singleton viewmodel

Heyo家伙,

我现在在我的程序中遇到了一些问题,这让我更加困扰。

这是我在我的程序中使用的Singleton类。

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
}

我使用这些Candidate / Enterprise /...- Objects作为我的ComboBoxes的ItemSources,这非常有效。 要在其他视图模型中使用这些对象,我想将它们保存到Singleton类,从那里我想在所有其他视图模型中加载它们。

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;
}

以下是我在程序中使用的组合框之一。

<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>

SaveView方法看起来像这样

public void SaveView()
{
    Resources.Instance.Candidate = Candidate;
    Resources.Instance.Enterprise = Enterprise;
    Resources.Instance.WikomContact = WikomContact;
}

表单加载时也会触发RefreshView方法。 问题是,组合框从数据库中获得正确的输入,但是如果我选择其中一个,那么更改视图并再次加载它,SelectedValue不是我之前输入的那个......

有谁知道我做错了什么?或者任何人都可以告诉我为什么我的“想法/方法”不起作用?

抱歉英语不好,我通常说德语! ;)

1 个答案:

答案 0 :(得分:0)

Snaylor;

您的属性不应该是静态的,它们应该是实例属性:

public Candidate Candidate { get; set; }
public Enterprise Enterprise { get; set; }
public WikomContact WikomContact { get; set; }
public AMSContact AMSContact { get; set; }

当你引用你的单身人士时,资源应该是对实例的引用:

Candidate = Resources.Instance.Candidate;
Resources.Instance.Candidate = Candidate;