4

標準の GridView コントロールの機能を拡張して拡張しようとしている winrt 環境のプロジェクトがあります。目標は、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, Consius.ActiveWork, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'; target element is 'Consius.ActiveWork.Controls.AppGridView' (Name='ContactsList'); target property is 'appItems' (type 'IObservableVector`1<Object>').

ContactsListSelectedItems のタイプを次のように変更した場合:

IObservableVector<object>

それはすべてうまくいきます。

これは、クラス オブジェクトを使用して MVVM クラスを作成する私にとって受け入れられる解決策ではありません。

何が悪いのかヒントをくれる人はいますか?

4

2 に答える 2

1

IObservableVector の代わりに ObservableCollection と、見つけたカスタム実装を試しましたか?

于 2013-08-02T15:32:11.533 に答える