加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何编写自定义依赖属性并将数据绑定到自定义类型?

发布时间:2020-12-15 21:54:22 所属栏目:百科 来源:网络整理
导读:我在winrt环境中有一个项目,我试图通过扩展它来扩展标准GridView控件的功能.目标是更改GridView的SelectedItems行为. public class myGridView : GridView{ /// summary /// My replacement of SelectedItems /// /summary public IObservableVectorobject a
我在winrt环境中有一个项目,我试图通过扩展它来扩展标准GridView控件的功能.目标是更改GridView的SelectedItems行为.

public class myGridView : GridView
{

    /// <summary>
    ///  My replacement of SelectedItems
    /// </summary>
    public IObservableVector<object> appItems
    {
        get { return GetValue(AppSelectedItemsProperty) as IObservableVector<object>; }
        set { SetValue(AppSelectedItemsProperty,value);
        appItems.VectorChanged += AppSelectedItemsChanged;
        }
    }

    /// <summary>
    /// Identifies the AppSelectedItems dependency property.
    /// </summary>
    public static readonly DependencyProperty AppSelectedItemsProperty =
            DependencyProperty.Register(
            "appItems",typeof(IObservableVector<object>),typeof(AppGridView),new PropertyMetadata(null,AppItemsPropertyCallback));

    ….
    ….
    ...
   }

在我的XAML文件中,我有以下内容..

<xx
   …….
   <appControls:AppGridView  appItems="{Binding ContactsListSelectedItems,Mode=TwoWay } }">
       .…
        …
   </appControls:AppGridView >
   …..
   …….

 /xx>

最后一段代码是我绑定到Datacontext的MVVM类.

public  class myModel: baseModel
 {
   ……
   ……..
   /// <summary>
    /// Not Working
    /// </summary>
    private  IObservableVector<Contact> _ContactsListSelectedItems;
    public IObservableVector<Contact> ContactsListSelectedItems
    {
        get
        {
            return (IObservableVector<Contact>)_ContactsListSelectedItems;
        }
        set
        {
            SetProperty<IObservableVector<Contact>>(ref _ContactsListSelectedItems,value);              
        }
    }

 ….
 ….
}

我在这里找到了IObservableVector的实现:https://gist.github.com/runceel/2437074

绑定到ContactsListSelectedItems的数据不起作用,给出以下错误:

Error: Cannot get 'ContactsListSelectedItems' value (type 'Object') from type 'Consius.ActiveWork.Pages.ContactPage.ContactPageViewModel,Consius.ActiveWork,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null'. BindingExpression: Path='ContactsListSelectedItems' DataItem='Consius.ActiveWork.Pages.ContactPage.ContactPageViewModel,PublicKeyToken=null'; target element is 'Consius.ActiveWork.Controls.AppGridView' (Name='ContactsList'); target property is 'appItems' (type 'IObservableVector`1<Object>').

如果我将ContactsListSelectedItems的类型更改为:

IObservableVector<object>

这一切都运作良好.

对我来说这不是一个可接受的解决方案,使用类对象编写我的MVVM类.

有没有人可以给我一个提示什么是错的?

解决方法

您是否尝试使用ObservableCollection而不是IObservableVector以及您找到的自定义实现?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读