2016-04-08 46 views
0

ObservableCollectionをXAMLを通じてListViewにバインドする方法については、多くの質問があります。私はどのようにコレクションをプログラムでListViewにバインドする必要があります。助けになるいくつかの質問がありますが、私はまだ私が必要とするものを正確には扱っていません。ObservableCollectionをlistViewにプログラムでバインドする

私は、これらのクラスがあります。

public class myTask 
{ 
    public DateTime TaskDate { get;} 
    public string TaskName { get;} 

} 
public class myTaskList : List<myTask> 
{ 
    public ObservableCollection<myTask> getMyTasks(DateTime d) 
    { 
     ObservableCollection<myTask> t = new ObservableCollection<myTask> 
         (this.Where(x => x.TaskDate == d).ToList<myTask>()); 
     return t; 
    } 
} 

をそして私は、実行時にリストビューにgetMyTasksの結果のみTaskName:指定をバインドします。私はこのアプローチを試みました:

ListView lv = new ListView(); 
    //assuming I declare myTaskList a static class 
    lv.DataContext = myTaskList.getMyTasks(DateTime.Now); 
    var binding = new Binding(); 
    binding.Source = lv; 
    lv.SetBinding(ListView.ItemsSourceProperty, binding); 

結果はリストに結びつくだけで、結果にはどのようにしてTaskNameをバインドできますか?

答えて

1

最終的に私のシナリオに適用できる解決策を見つけたと思います。

複数のフィールドのObservableCollectionデータセットのフィールドをリストビューにバインドすることは可能です。私たちがしなければならないことは、リソースにデータテンプレートを宣言している:

<DataTemplate x:Key='myTaskItemTemplate'> 
      <TextBlock x:Name='ItemTaskName' 
           FontSize='15' 
           HorizontalAlignment='Stretch' 
           VerticalAlignment='Stretch' 
           TextAlignment='Center' 
           Text='{Binding TaskName}' /> 
    </DataTemplate> 

そして、上記のテンプレート

ListView lv = new ListView { ItemTemplate = (DataTemplate)Resources["myTaskItemTemplate"] }; 

を使用してリストビューを作成し、ソースはにバインドされたのObservableCollectionデータセットであることとの結合を作成しますリストビュー

var t = myCalendarMonth.TaskList(d.theDate); 
    lv.DataContext = t; 
    var binding = new Binding(); 
    binding.Source = t; 
    lv.SetBinding(ListView.ItemsSourceProperty, binding); 

のItemSourcePropertyは、私はXAMLに非常に新しいですが、アプローチを約議論したようにそこに多くの、より良い解決策があるかもしれません確信しています私が探している結果をもたらすようです。

0

あなたの質問がはっきりとわかるMinimal, Complete, and Verifiable exampleがなければ、必要な答えを確実に知ることは不可能です。しかし、&hellip;

ここではバインド操作はまったくないようです。表示するバインディングコードは循環バインディング(ListViewオブジェクトのItemsSourceプロパティを自身にバインドする)を作成しますが、これは役に立たないようです。端的に言え、あなたは単にItemsSourceプロパティを割り当てることによって、あなたが望むものを達成することができるはず、とDisplayMemberPathプロパティ:

lv.ItemsSource = myTaskList.getMyTasks(DateTime.Now); 
lv.DisplayMemberPath = "TaskName"; 

ですべてのバインディングを作成する必要はありません。

関連する問題