Wpf 在代码隐藏中使用依赖项属性

Wpf 在代码隐藏中使用依赖项属性,wpf,dependency-properties,Wpf,Dependency Properties,如何在CodeBehind中使用已定义的DependencyProperty 这是我的财产: ItemContainerProperty = DependencyProperty.Register("ItemContainer", typeof(ObservableCollection<Item>), typeof(Manager)); } public ObservableCollection<Item&

如何在CodeBehind中使用已定义的DependencyProperty

这是我的财产:

    ItemContainerProperty = DependencyProperty.Register("ItemContainer",
                      typeof(ObservableCollection<Item>), typeof(Manager));
    }


    public ObservableCollection<Item> ItemContainer
    {
        get { return (ObservableCollection<Item>)GetValue(ItemContainerProperty); }
        set { SetValue(ItemContainerProperty, value); }
    }
ItemContainerProperty=DependencyProperty.Register(“ItemContainer”,
typeof(可观察到的收集),typeof(经理);
}
公共可观察收集项容器
{
获取{return(observeCollection)GetValue(ItemContainerProperty);}
set{SetValue(ItemContainerProperty,value);}
}
当我这样做时:

for (int i = 0; i <= ItemContainer.Count - 1; i++)
{
}

for(int i=0;i如果您不打算为DependencyProperty定义默认值,那么您需要在某个点设置它,它的默认值为null

   public partial class MainWindow : Window
    {
        public ObservableCollection<string> Items
        {
            get { return (ObservableCollection<string>)GetValue(ItemsProperty); }
            set { SetValue(ItemsProperty, value); }
        }
        public static readonly DependencyProperty ItemsProperty =
            DependencyProperty.Register("Items", typeof(ObservableCollection<string>), typeof(MainWindow));

        public MainWindow()
        {
            InitializeComponent();

            Items = new ObservableCollection<string>();
        }
    }
公共部分类主窗口:窗口
{
公共可观测收集项目
{
get{return(ObservableCollection)GetValue(ItemsProperty);}
set{SetValue(ItemsProperty,value);}
}
公共静态只读从属属性ItemsProperty=
DependencyProperty.Register(“项”)、typeof(ObservableCollection)、typeof(MainWindow));
公共主窗口()
{
初始化组件();
Items=新的ObservableCollection();
}
}
如果不想这样做,那么可以在依赖项属性声明中定义默认值

   public partial class MainWindow : Window
    {
        public ObservableCollection<string> Items
        {
            get { return (ObservableCollection<string>)GetValue(ItemsProperty); }
            set { SetValue(ItemsProperty, value); }
        }
        public static readonly DependencyProperty ItemsProperty =
            DependencyProperty.Register("Items", typeof(ObservableCollection<string>), typeof(MainWindow), new PropertyMetadata(new ObservableCollection<string>()));

        public MainWindow()
        {
            InitializeComponent();
        }
    }
公共部分类主窗口:窗口
{
公共可观测收集项目
{
get{return(ObservableCollection)GetValue(ItemsProperty);}
set{SetValue(ItemsProperty,value);}
}
公共静态只读从属属性ItemsProperty=
DependencyProperty.Register(“项”、typeof(ObservableCollection)、typeof(MainWindow)、new PropertyMetadata(new ObservableCollection());
公共主窗口()
{
初始化组件();
}
}

您是否初始化了ItemContainer?它是否绑定到某个UI元素?调试器会说什么?@makc我必须如何初始化ItemContainer?该属性未绑定到UI元素。调试器会说在for循环中ItemContainer为Null,那么您就有了unswer为什么不能使用它,您的属性应该有数据/被初始化t数据应该表示一些业务逻辑OK这就是错误的原因。你知道一个好例子吗?我如何绑定到这个dependencyproperty?这样我就可以使用:注意,在DP中,将引用类型默认为non null,就像你的第二个例子一样,可能会引入非常奇怪的错误,因为WPF试图在我们所有人之间共享单个集合属性的属性(例如派生类)第一个例子在大多数情况下都是可取的。我甚至认为第二个例子在所有情况下都是无效的,除了非常例外的情况。你通常不应该这样做。@Clemens你有没有一个提示给我,为什么我不能注意到typ observablecollection的dependencyproperty何时被绑定更新了?在propertychange ev上有什么可以实现的吗ent?您必须向PropertyMetadata注册PropertyChangedCallback,如前一个问题中所示。我强烈建议您阅读有关的文章。如果您想知道何时从集合中插入或删除某些内容,则需要订阅其CollectionChanged事件。