WPF,MVVM将ViewModel-Property绑定到嵌套的UserControl

时间:2013-08-23 08:25:29

标签: wpf binding inotifypropertychanged

我有2个用户控件,名为" MyTree"和#34; MyGrid"。 我有另一个名为" Content"的用户控件。其中有一个" MyTree"和#34; MyGrid"在里面。 我有一个带有标签控件的窗口。 每个标签项都包含"内容"。标签项是动态添加的。 那么如何将项目添加到" MyGrid"当我动态创建标签项时。 我使用MVVM模式和INotifyPropertyChanged事件 我将项目源设置为某个属性。

现在我的" ContainerPanelViewModel"具有

private string pro11 ;
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged(PropertyChangedEventArgs e)
        {
            if (PropertyChanged != null)
            {
                MessageBox.Show("Enterd loop");
                PropertyChanged(this, e);
            }
        }
        public string pro1
        {
            get
            { 
                return pro11; 
            }
            set 
            {
                if (pro11 != value)
                {
                    pro11 = value;
                    OnPropertyChanged(new PropertyChangedEventArgs("pro1"));
                }

            }
        }

我有另一个有

的视图模型
ObservableCollection<ContainerPanelViewModel> RootNodeTabCollection

我添加了

 RootNodeTabCollection[0].pro1 = "abc";

但标签内容未获得更新

if (PropertyChanged != null)

总是假的,而不是进入循环。

随时不显示消息框

2 个答案:

答案 0 :(得分:1)

可能你有一个ViewModel集合,其中每个ViewModel都是某个Tab的DataContext。然后,此ViewModel应该有另一个集合,可以用作Grid或Tree的DataContext。

答案 1 :(得分:1)

如果PropertyChanged为null,则表示视图模型没有绑定任何内容。在XAML中,您需要使用{Binding ...}语法将属性绑定到视图模型的实例,以便在更新视图模型上的属性时发生任何事情。

您可能已经有一些绑定,但您可以调试这些绑定以了解绑定失败的原因。有几种方法可以做到这一点,但一种方法是将PresentationTraceSources.TraceLevel=High添加到绑定。 E.g:

ItemsSource="{Binding Items, PresentationTraceSources.TraceLevel=High}"

然后,WPF会将该特定绑定的绑定跟踪信息写入调试窗口。

相关问题