2017-02-04 2 views
0

私は、別のユーザーコントロールからdatacontextを設定したユーザーコントロールを作成しました。私はメイングリッドにこのusercontrolを挿入すると、正常に動作します。datatemplateと "メイン"グリッドのusercontrolの違い

<Grid> 
    <local:ShowListView DataContext="{Binding ShowListViewModel}"/> 
</Grid> 

しかし、私はこの

<UserControl.Resources> 
    <DataTemplate DataType="{x:Type showViewModels:ShowListViewModel}"> 
     <local:ShowListView /> 
    </DataTemplate> 
</UserControl.Resources> 
<Grid> 
    <ContentControl Content="{Binding CurrentView}"/> 
</Grid> 

のように、DataTemplateを介して、それを挿入したときには、このエラーがスローされます

データストアクエリに直接結合(DbSet、dbQueryタグ、DbSqlQuery、DbRawSqlQuery)サポートされていません。代わりに、DbSetのLoadを呼び出してローカルデータにバインドするなどして、DbSetにデータを設定します。第1の方法は問題なく動作しますが、二番目はエラーをスローなぜ

ShowListView制御は、この

<ListBox ItemsSource="{Binding Shows}" BorderBrush="Transparent" 
     HorizontalContentAlignment="Stretch"> 

と関連のviewmodel

public ObservableCollection<ShowModel> Shows { get; set; } 

public ShowListViewModel() 
{ 
    using (var db = new MSDBContext()) 
    { 
     var shows = (from s in db.Shows select s).ToList(); 

     Shows = new ObservableCollection<ShowModel>(shows); 
    } 
} 

が含まれていますか? Datatemplateで動作するものを変更する必要はありますか?

答えて

1

のDataTemplateでユーザーコントロールのDataContextの属性を削除します。テンプレートが提供する印加されたときに、あなたが明示的にどこかにそのDataContextプロパティを設定しないことを

<DataTemplate DataType="{x:Type showViewModels:ShowListViewModel}"> 
    <local:ShowListView /> 
</DataTemplate> 

ShowListViewが自動的にDataContextのようShowListViewModelオブジェクトを取得します。

結果をObservableCollectionに入力する前に、必ずクエリを実行してください。だから私はDataContextのを削除し(私は成功せず、前に両方のバリアントを試してみました)、変数を表示するためにToListメソッドを追加

public ShowListViewModel() 
{   
    using (var db = new MSDBContext()) 
    { 
     var shows = (from s in db.Shows select s).ToList(); 

     Shows = new ObservableCollection<Show>(shows); 
    } 
} 
+0

:あなたはToList()メソッドを呼び出すことによってこれを行うことができます。そして、それでも私はエラーを投げます。 'ToObservableCollection'メソッドはIEnumerableを受け取り、それをObservable Collection(IEnumarable引数を持つコンストラクタ経由)に変更します。 – Crooker

+0

ToObservableCollectionメソッドを使用する代わりに、新しいObservableCollectionを作成するためにコンストラクタを使用するだけの場合はどうなりますか? – mm8

+0

私はこのコンストラクタに気付かなかったので、私はこのメソッドを持っていました。メソッドはforeachを使っていました。私は同じ結果で直接(更新されたメインポストに見られるように)それを試しました。 – Crooker

関連する問題