WPF 自定义的DependencyProperty属性不被识别

作者:超级管理员 更新时间:2017-10-31 09:59:45 来源:未知 点击:15642
定义了一个多选的Comobox,自定义依赖属性在调用时不被识别,不知道为什么。public partial class MulitComboBoxUserControl : UserControl, 
定义了一个多选的Comobox,自定义依赖属性在调用时不被识别,不知道为什么。

public partial class MulitComboBoxUserControl : UserControl, INotifyPropertyChanged
    {
        public MulitComboBoxUserControl()
        {
            InitializeComponent();

        }

        public static readonly DependencyProperty ItemsSourceProperty =
     DependencyProperty.Register("ItemsSource", typeof(ObservableCollection<MultiComboBoxModel>), typeof(MulitComboBoxUserControl),new UIPropertyMetadata(null));


        public ObservableCollection<MultiComboBoxModel> ItemsSource
        {
            get { return (ObservableCollection<MultiComboBoxModel>)GetValue(ItemsSourceProperty); }
            set
            {
                SetValue(ItemsSourceProperty, value);
            }
        }

        public static readonly DependencyProperty SelectedItemsProperty = DependencyProperty.Register("SelectedItems", typeof(ObservableCollection<MultiComboBoxModel>), typeof(MulitComboBoxUserControl), new PropertyMetadata(null,null));

        public ObservableCollection<MultiComboBoxModel> SelectedItems
        {
            get { return (ObservableCollection<MultiComboBoxModel>)GetValue(SelectedItemsProperty); }
            set
            {
                SetValue(SelectedItemsProperty, value);
            }
        }

        private string _selectedText;
        public string SelectedText
        {
            get { return _selectedText; }
            set
            {
                _selectedText = value;
                this.NotifyPropertyChanged("SelectedText");
            }
        }




        public event PropertyChangedEventHandler PropertyChanged;

        protected void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        private void CheckBox_Click(object sender, RoutedEventArgs e)
        {
            MultiComboBoxModel model = sender as MultiComboBoxModel;

            if (model != null)
            {
                IEnumerable<MultiComboBoxModel> items = ItemsSource.Where(b => b.IsSelected == true);
                SelectedItems = new ObservableCollection<MultiComboBoxModel>(items);
                StringBuilder builder = new StringBuilder();

                foreach (var item in items)
                {
                    builder.Append(item.Title + " ");
                }

                SelectedText = builder == null ? string.Empty : builder.ToString();
            }
        }
    }


    public class MultiComboBoxModel : INotifyPropertyChanged
    {
        private string _title;
        private bool _isSelected;

        #region Properties
        public string Title
        {
            get
            {
                return _title;
            }
            set
            {
                _title = value;
                NotifyPropertyChanged("Title");
            }
        }



        public bool IsSelected
        {
            get
            {
                return _isSelected;
            }
            set
            {
                _isSelected = value;
                NotifyPropertyChanged("IsSelected");
            }
        }

        private int _id;
        public int Id
        {
            get { return _id; }
            set
            {
                _id = value;
                this.NotifyPropertyChanged("Id");
            }
        }


        private object _tag;

        public object Tag
        {
            get { return _tag; }
            set
            {
                _tag = value;
                this.NotifyPropertyChanged("Tag");
            }
        }

        #endregion

        public event PropertyChangedEventHandler PropertyChanged;

        protected void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }


    <Grid>
        <ComboBox Text="{Binding SelectedText}" IsEditable="True" ItemsSource="{Binding ItemsSource}" >
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <CheckBox IsChecked="{Binding IsChecked}" Click="CheckBox_Click"/>
                        <TextBlock Text="{Binding Title}"/>
                    </StackPanel>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
    </Grid>


调用部分提示ItemsSource 和SelectedItems 无法识别或访问成员

<control:MulitComboBoxUserControl Grid.Row="0"  ItemsSource="{Binding ItemsSource}" SelectedItems="{Binding SelectedItems}"></control:MulitComboBoxUserControl>


以下是关于本问题的解决方案:

解决方案1、
我也是遇到过,之前试过取消掉 new UIPropertyMetadata(null)  默认值的参数重新编译下就正常了。
解决方案2、
引用 1 楼 qq_28194303 的回复:
我也是遇到过,之前试过取消掉 new UIPropertyMetadata(null)  默认值的参数重新编译下就正常了。

把版本从.net framework 4.0 t提升到4.5就可以编译过了。。。。不懂为什么

推荐阅读

热门内容

md5加密,要加密的串带有特殊字符

现在在做跨境物流,需要接法国物流接口。接...

winform客户端界面与其他软件相似,

项目开始的时候,领导一句话照着XXX软件...

Dev GridControl 单元格为

怎么阻止对话框弹出,并且在有空值得情况下...

“System.TypeInitiali

web是项目名称,在网上查说什么的都有,...

现在IT编程做网站是不是没前途了?感觉都

本人是从事1年多的程序猿,做asp.ne...

ViewBag和ViewData怎么 才

本帖最后由yangliweng2于201...

WPF 如何禁用ScrollViewer

以下是关于本问题的解决方案:解决方案1、...

GridControl 最后一列按回车键

GridControl  当光标在最后一...

ASP.NET中关于Theme的问题

我是设置了一个Default的主题。希望...

我用一个方法返回一个Image,保存为啥

我在方法中保存 ,就不会有问题,可是我想...

最新内容

C#基础问题:只读,关于Array.IsReadOnly和IList.IsReadOnly

不清楚为什么问题列表看不到我的问题,无奈再开一贴原题贴以下是关于本问题的解决方案...

md5加密,要加密的串带有特殊字符

现在在做跨境物流,需要接法国物流接口。接口需要传个安全秘钥,这个秘钥就是规定的几...

backgroundWorker关于Winform最简单的线程问题,请求各位指导一下

我想使用backgroundWorker1,启动应用后每隔20秒去读取数据库,看...

一个小问题求助

类似图中数据,要筛选出MesNum与InventoryNum不同的数据该怎么写 ...

WPF 自定义的DependencyProperty属性不被识别

定义了一个多选的Comobox,自定义依赖属性在调用时不被识别,不知道为什么。p...

ArcGis For JavaSrcipt 如何加载shp和dwg和dbf文件?

如何加载?跪求大神指导。并且可以清除掉!!以下是关于本问题的解决方案:...

一条sql语句,把重复记录的字段的值相加

本帖最后由NewCSDN2005于2017-10-2915:35:27编辑acc...

链接带的有?id=xxx,查询结果一直显示id为xxx的咋办?

一个链接,比如www.baidu.com链接要点进去直接显示某个人,而不是所有就...

通过数据库获取 like '%[螺丝]%' 怎么写代码!

通过数据库获取 like '%[螺丝]%' 怎么写代码SELECT top 5 ...

winform客户端界面与其他软件相似,需要修改界面

项目开始的时候,领导一句话照着XXX软件实现这些功能,项目全程就我一个人开发,然...

Dev GridControl 单元格为空验证弹框问题!!! 希望有人能解决了

怎么阻止对话框弹出,并且在有空值得情况下不允许添加新行以下是关于本问题的解决方案...

VS2015 报表已经有列,现在怎么动态生成列加进去(winform)

VS2015 报表已经有列,现在怎么动态生成列加进去(winform)以下是关于...

WebService 怎么跳过登录页面?

另外,WebService发布后,要替换哪些文件?bin文件夹里名字一样的就找到...

VB.NET注册热键F12,或者屏蔽系统F12键

如题。请各位大侠帮忙解决。以下是关于本问题的解决方案:解决方案1、看不懂,不是当...

“System.TypeInitializationException”类型的异常在 Web.dll 中发生,但未在用户代码中进行处理

web是项目名称,在网上查说什么的都有,也没有改对,请大家帮忙,怎么解决以下是关...

如何正确启动Explorer.exe

如何正确启动Explorer.exe我在实际项目中遇到的一个问题:客户要求开机输...

vs2015中stdin如何进行终止?

在vs2015中运行如下代码:int main(){unsigned int a...

现在IT编程做网站是不是没前途了?感觉都是"增删改查",可替换性太强了.

本人是从事1年多的程序猿,做asp.net的,做动态网站和管理系统的(包括前端和...

降频 不存在的

image1509379333929548.png(123.51KB,下载...

qt 鼠标移动到加载完图片的label后,对label中的图片实现放大镜功能!

鼠标一旦进入label和按键就会下沉到下面。后来重写QLabel还是不能实现该功...