0

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

现在我的“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)

总是假的..并且不进入循环。任何时候都不显示消息框

4

2 回答 2

1

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

于 2013-08-23T08:33:32.343 回答
1

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

您可能已经有一些绑定,但您可以调试这些绑定以了解有关绑定失败原因的更多信息。有几种方法可以做到这一点,但一种方法是添加PresentationTraceSources.TraceLevel=High到绑定中。例如:

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

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

于 2013-08-23T11:34:15.497 回答