2011-07-14 16 views
1
でLongListSelector

私が初めてMVVMライトを使用して、そう私と一緒に負担しています...私は私のメインページにLongListSelectorを持っている、と私はからのデータとそれをロードするためにRelayCommandを使用していますMVVM

のロードページがロードされたときのSQLCEデータベース。私MainViewModelで

、私はプロパティワークアウトしている:

public const string WorkoutsPropertyName = "Workouts"; 

private PublicGrouping<DateTime, Workout> _workouts; 
public PublicGrouping,DateDime, Workout> Workouts 
{ 
    get { return workouts; } 
    set 
    { 
     if (_workouts == value) { return; } 
     _workouts = value; 
     RaisePropertyChanged(WorkoutsPropertyName); 
    } 
} 

はその後、コンストラクタで、私はLoadedCommandを作成します。

public MainViewModel() 
{ 
    LoadedCommand = new RelayCommand(() => 
    { 
     context = new XLogDataContext(); 

     using (context) 
     { 
      if (context.Workouts.Count() > 0) 
      { 
       var workoutsByDate = from workout in context.Workouts 
            group workout by workout.WorkoutDate 
            into c 
            orderby c.Key 
            select c; 
       Workouts = workoutsByDate as PublicGrouping<DateTime, Workout>; 
      } 
     } 
    }); 
} 

RelayCommandを実行すると、ワークアウトは常にnullを返します。私はデータが返されていることを知っているので、問題はLINQクエリをPublicGroupingにキャストすることにあると思います。私はまたプロパティを作成しようとしました

ObservableCollection<PublicGrouping<DateTime, Workout>> 

しかし、それも動作しません。

UPDATE:私はこのラインを使用するRelayCommandを変更

Workouts = new PublicGrouping<DateTime, Workout>(workoutsByDate); 

をしてPublicGroupingため、このコンストラクタを追加しました:私はまだ_internalGroupingのassigmentにInvalidCastExceptionが取得

private readonly IGrouping<TKey, TElement> _internalGrouping; 

public PublicGrouping(IOrderedQueryable<IGrouping<DateTime, Workout>> workoutsByDate) 
{ 
    _internalGrouping = (IGrouping<TKey, TElement>) workoutsByDate; 
} 

をコンストラクタで

答えて

1

これは動作するはずです:

public const string WorkoutsPropertyName = "Workouts"; 

private List<PublicGrouping<DateTime, Workout>> _workouts; 
public List<PublicGrouping<DateTime, Workout>> Workouts 
{ 
    get { return _workouts; } 
    set 
    { 
     if (_workouts == value) 
     { 
      return; 
     } 



     _workouts = value; 

     RaisePropertyChanged(WorkoutsPropertyName); 
     } 
    } 

    public MainViewModel() 
    { 
     LoadedCommand = new RelayCommand(() => 
      { 
       context = new XLogDataContext(); 

       using (context) 
       { 
        if (context.Workouts.Count() > 0) 
        { 
         var workoutsByDate = from workout in context.Workouts 
              group workout by workout.WorkoutDate 
              into c 
              orderby c.Key 
              select new PublicGrouping<DateTime, Workout>(c); 
         Workouts = workoutsByDate.ToList(); 
        } 
       } 
      }); 
    } 
2

実際にキャストに失敗し、as演算子を使用すると、InvalidCastExceptionがあなたのケースに投げられてマスクされません。

PublicGroupingのコンストラクタを作成します。IEnumerableには、worksByDateが含まれます。

(明示的なキャストと呼ばれる)の鋳造のこのタイプ:oの内部型を文字列にキャストできない場合

object o = 2; 
string h = (string)o; 

InvalidCastExceptionをスローします。 as演算子はこの例外をスローせず、代わりにnullを返します。

+1

Upvoted例外を隠す 'と' 演算子のために。 – JeffCren

関連する問題