【问题标题】:Windows Phone 7 Application - INPC problemsWindows Phone 7 应用程序 - INPC 问题
【发布时间】:2012-10-15 19:10:01
【问题描述】:

我是第一次做一个 WP7 应用程序,我正在尝试使用 MVVM 模式。 我正在制作一个闹钟,这就是我所拥有的:

视图 - MainView.xaml

...
 <TextBox Text="{Binding Hour, Mode=TwoWay}"></TextBox>
...

模型 - AlarmClock.cs:

...

private string _second = 22;
  public string Second {
        get { return _second; }
        set {
            _second = value;
            OnPropertyChanged("Second");
        }
    }
...

ViewModel - MainViewModel.cs

...
private AlarmClock alarmClock;

public MainViewModel() {
    alarmClock = new AlarmClock();
}

public string Second {
        get { return alarmClock.Second; }
        set {
            alarmClock.Second = value;
            OnPropertyChanged("Second");
        }
    }

在 MainView.xaml.cs 中,我将数据上下文设置为 this.DataContext = new ViewModel();

ViewModel 和 Model 都实现了 INotifyPropertyChanged 接口。

我的问题是:在模型中,我有一个每秒滴答的 DispatcherTimer。当我这样做时:

秒 = 23;

我的视图(我的文本框)没有更新,也没有显示 _second 的值。但是如果我在文本框中写了一些东西,那么我的模型似乎是用输入的值更新的。

谁能看出我做错了什么?

提前谢谢你, 彼得

【问题讨论】:

    标签: windows-phone-7 mvvm


    【解决方案1】:

    您的示例中给出的属性名称和类型有点令人困惑,但我认为您的主要问题如下:

    您的MainViewModel 中有一个AlarmClock 类型的属性。您有一个MainViewModel 实例作为DataContextMainView.xaml。我看到您将MainViewModelSecond 属性委托给AlarmClock 实例。当更改来自 UI 时,这很好,但我认为您的 DispatcherTimer 在 AlarmClock 实例上运行,但该实例没有任何观察者(因为 UI 侦听 MainViewModel 实例)。

    您有多个选项可以使其工作,但我对这种情况的建议是扩展 TextBox 绑定路径并将其直接绑定到 AlarmClock 实例。当然你需要在MainViewModel上暴露AlarmClock

    private AlarmClock alarmClock;
    
    public MainViewModel() {
        alarmClock = new AlarmClock();
    }
    
    public AlarmClock AlarmClock 
    {
        get { return alarmClock; }
    }
    

    然后更改您的 xaml:

    <TextBox Text="{Binding AlarmClock.Hour, Mode=TwoWay}"></TextBox>
    

    另一种选择是订阅 MainViewModel 中的 AlarmClock 实例 PropertyChanged 事件,这是 UI 的委托,但这很麻烦。您还可以更改 DispatcherTimer 以在 MainViewModel 上运行,但我认为它不属于那里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多