在构造函数内部时,View Model不更新UI

时间:2014-07-07 18:06:28

标签: c# wpf mvvm

我觉得我的观点没有被更新,因为NotifyPropertyChanged事件是在构建UI之前触发但我不知道如何克服这个。

我不是真的发布分析代码,因为我知道数据绑定工作。它们只是在构建页面时失败。

我严格发布它,这样你就可以了解我在说什么。

    public Obj1 SelectedObj1
    {
        get { return _SelectedObj1; }
        set { _SelectedObj1 = value; NotifyPropertyChanged("SelectedObj1"); }
    }

    public Obj2 SelectedObj2
    {
        get { return _SelectedObj2; }
        set { _SelectedObj2= value; NotifyPropertyChanged("SelectedObj2"); }
    }

    public Obj3 SelectedObj3
    {
        get { return _SelectedObj3; }
        set { _SelectedObj3 = value; NotifyPropertyChanged("SelectedObj3"); }
    }

在我的构造函数中

 public constructor(){
     BuildFakeData();
     SelectedObj1 = observableCollection[0];
     SelectedObj2 = SelectedObj1.obj2s.Count > 0 ? SelectedObj1.obj2s[0] : null;
     SelectedObj3 = SelectedObj2.obj3s.Count > 0 ? SelectedObj2.obj3s[0] : null;
   }

我的问题是,当你在做MVVM时,如果你在构造函数中设置绑定属性,比如说选择了一个DataGrid的Row,它会填充还是失败,因为XAML还没有构建?

这是在视图中创建datacontext的地方

    <Window.Resources>
        <vm:ViewModel x:Key="viewModel"/>
    </Window.Resources>
    <Grid 
        DataContext="{StaticResource viewModel}">

这是我为网格设置所选项目的地方

 <igWPF:XamDataGrid                    
        ActiveDataItem="{Binding SelectedObj1}"
        DataSource="{Binding observableCollection}"

1 个答案:

答案 0 :(得分:0)

如果您的视图在创建视图模型时尚不存在,那么当您的属性更新时,视图仍未监听。但是,当创建视图并将视图模型指定为其数据上下文时,视图将自动从视图模型(其数据上下文)加载值。

因此,INPC根本不是一个问题。您可以在示例中创建没有INPC的属性并使其工作(因为值已在构造函数中设置)。