簡體   English   中英

以編程方式將ObservableCollection綁定到listView

[英]Binding ObservableCollection to a listView programmatically

如何通過XAML將ObservableCollection綁定到ListView有很多問題。 我需要如何以編程方式將集合綁定到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?

沒有一個很好的最小,完整和可驗證的示例清楚地說明您的問題,就不可能確定知道您需要什么答案。 但…

似乎根本沒有綁定操作。 您顯示的綁定代碼創建一個循環綁定(將ListView對象的ItemsSource屬性綁定到自身),這似乎沒有用。 更重要的是,只需分配ItemsSource屬性和DisplayMemberPath屬性,您應該就能完成所需的工作:

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

完全不需要創建綁定。

我想我終於找到了適用於我的方案的解決方案。

可以將多個字段的ObservableCollection數據集的字段綁定到列表視圖。 我們需要做的是在資源中聲明一個數據模板:

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

然后使用上面的模板創建listview

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

然后創建一個綁定,其源是綁定到listview的ItemSourceProperty的ObservableCollection數據集

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

我肯定會有更好的解決方案,因為我對XAML還是很陌生,但是討論的方法似乎可以產生我想要的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM