使用mvvm light

时间:2016-04-06 07:32:54

标签: c# mvvm win-universal-app

对不起可能是愚蠢的问题,我试图找到关于这个主题的内容,但结果没有任何结果。

所以我使用MVVM Light和SQLite.Net获得了UWP Windows商店应用程序,它在数据库中添加了一些文件。我想跟踪添加到数据库的文件数量,因此我为它创建了一个类和静态字段:

public class Vars : ObservableObject
{
    public static Counter MyCounter = new Counter() { SongCounter = 0 };
}

public class Counter : ObservableObject
{
    private int songCounter;
    public int SongCounter
    {
        get { return songCounter; }
        set
        {
            songCounter = value;
            RaisePropertyChanged();
        }
    }
}

在提供数据库连接方法的Dataservice类中,我使用myCounter来计算添加文件的数量,如下所示:

public class Dataservice
{
    public static void RebuildLibrary()
    {
        //getting fileList
        foreach(var file in fileList)
        {
            //doing some stuff here
            Vars.MyCounter.SongCounter++
        }
    }
}

(还应注意这部分有效 - MyCounter实际上是增量) 最后,名为MainViewModel的{​​{1}}中的字段绑定到XAML:

CounterText

愚蠢的问题是 - 如何将private string counterText; public string CounterText { get { return counterText; } set { counterText = value; RaisePropertyChanged(); } } MyCounter绑定?我试图设置

CounterText
CounterText = Vars.MyCounter.SongCounter.ToString(); 构造函数中的

但它没有得到更新。我应该使用Messenger发送MainViewModel一些通知吗?或者我完全错了,有更简单的方法来实现我的目标? :)

1 个答案:

答案 0 :(得分:0)

在我看来, 不要只为柜台使用模型。而是删除Foreach中的++,它将在每个循环中触发PropertyChanged并在循环外使用Count

CounterText  = filelist.Count;

如果需要,应将CounterText更改为SongCount类型int并使用IValueConverter

确保你的RaisePropertyChanged();被触发正确,你不应该这样做吗?

 RaisePropertyChanged("CounterText");