CustomControl绑定

时间:2013-12-06 11:11:37

标签: c# wpf data-binding wpf-controls

我有两个自定义控件,a和b,

自定义控件a具有类型为aClass

的Dependency属性

自定义控件b上有一组a,并且具有名为List<aClass>

的依赖项属性ItemSourceUI

还有另一个类bClass,它具有aClass类型的可观察集合,这在我的视图模型中使用。

public class MyViewModel : INotifyPropertyChanged
{
    public MyViewModel()
    {
        MyBClassInstance = new bClass();
    }

    private bClass _MyBClassInstance;
    public bClass MyBClassInstance
    {
        get { return _MyBClassInstance; }
        set { SetProperty(ref _MyBClassInstance, value); }
    }       

    ....
    // Here Implement INotifyPropertyChanged
} 

这是我的观点

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:UILib="clr-namespace:Gramas.UI;assembly=Gramas" x:Class="MyProy.Views.myView"
    Title="{Sample}" Height="600" Width="1200">
    <Grid>
        <UILIb:b Margin="10" ItemSourceUI="{Binding MyBClassInstance}"/>
    </Grid>
</Window>

在构造函数后面的代码中:

this.DataContext = new MyViewModel();

我的问题是在ItemSourceUI自定义控件的b的依赖属性Setter永远不会发生。

我缺少什么?

UPDATE:这是b

的依赖项属性
    public bClass ItemSourceUI 
    {
        get { return (bClass)GetValue(ItemSourceUIProperty ); }
        set
        {
            SetValue(ItemSourceUIProperty , value);
            DataContext = value;
        }
    }
    public static readonly DependencyProperty ItemSourceUIProperty =
        DependencyProperty.Register("ItemSourceUI", typeof(bClass), typeof(b), new PropertyMetadata(default(bClass)));  

1 个答案:

答案 0 :(得分:0)

此代码会导致您遇到的所有问题。你搞砸了DataContext和Binding需要适当的DataContext才能工作。

public bClass ItemSourceUI 
{
    get { return (bClass)GetValue(ItemSourceUIProperty ); }
    set
    {
        SetValue(ItemSourceUIProperty , value);
        DataContext = value;
    }
}

从setter中删除那个DataContext,你应该没问题。

如果您对此有任何疑问,请随时询问:)