標準の 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 クラスを作成する私にとって受け入れられる解決策ではありません。
何が悪いのかヒントをくれる人はいますか?