Jor*_*ork 1 data-binding silverlight wpf mvvm windows-phone-7
我正在编写一个应用程序,我正在尝试使用MVVM样式架构来处理我的数据绑定(尽管我没有使用MVVM特定库,例如MVVM Light).我有一个类存储我的应用程序所需的所有信息,然后为每个屏幕分配一个视图模型到其DataContext,它只选择特定屏幕所需的值,必要时格式化数据.
例如,主数据存储看起来像这样:
class DataStore {
int a, b, c;
string d;
DateTime e;
}
Run Code Online (Sandbox Code Playgroud)
然后分配给特定屏幕的视图模型就是这样的,它只使用了几个属性
class MainScreenViewModel {
public int data1 { get { return App.DataStore.a * App.DataStore.c } }
public int data2 { get { return App.DataStore.e.Day } }
}
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,当页面加载数据绑定时,它们应该填充.但是,它们不会在页面加载时自动更新.我已经在DataStore上实现了INotifyPropertyChanged,但似乎更改事件没有通过以反映在视图模型中.我敢肯定我这是一个非常糟糕的方式,所以如果有人能帮我指出正确的方向,我会非常感激.我在线阅读了一堆指南,但我似乎越来越困惑自己!
您必须在VM上实施INotifyPropertyChanged并加注PropertyChanged.为了做到这一点,你将不得不倾听DataStore.PropertyChanged.样品:
class MainScreenViewModel {
public int data1 { get { return App.DataStore.a * App.DataStore.c } }
public int data2 { get { return App.DataStore.e.Day } }
public MainScreenViewModel()
{
App.DataStore.PropertyChanged += (sender, e) =>
{
if (e.PropertyName == "a" || e.PropertyName == "c")
RaisePropertyChanged("data1");
if (e.PropertyName == "e")
RaisePropertyChanged("data2");
};
}
private void RaisePropertyChanged(string propertyName)
{
// raise it
}
}
Run Code Online (Sandbox Code Playgroud)
这里没有涉及的唯一部分是e.Day改变时的情景DataStore.
你的方法本身并不坏,绝对是好的开始.
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |