有没有一种方法可以从一个ObservableCollection创建和填充ListViews

时间:2019-12-02 12:16:25

标签: c# wpf mvvm

我有一个基于这些数据的可观察的集合:

enter image description here

可能添加了更多新数据,因此数据中的行数可能有所不同(有时是2个查询,有时是5个,...)

每行包含一个查询。

我想在ListView或GridView上显示每个查询结果:

        <StackPanel Grid.Row="1">
            <Label Content="{Binding Type1}"/>
            <Label Content="{Binding Definition1}"/>
            <ListView x:Name="ListRequete1" AlternationCount="2" ItemContainerStyle="{StaticResource alternatingStyle}"
                          ItemsSource="{Binding }" Margin="20" Height="170">
                <ListView.View>
                    <GridView x:Name="GridViewQuery1">

                   </GridView>
                </ListView.View>
            </ListView>
        </StackPanel>

是否可以执行一种方法:

对于ObservableCollection的每一行,我运行查询,如果查询结果不为空,我创建一个listView并显示数据吗?

最终结果示例:

enter image description here

1 个答案:

答案 0 :(得分:1)

最简单的方法是,ListView显示ViewModel中ObservableCollection<SQlQuery>的内容。 在哪里

class SQLQuery
{
  string Query{get; private set;}
  string Description {get; private set;}
}

然后在ViewModel中实现由ListView ItemSelected或ItemTapped事件触发的命令。这可以在您的代码后面或通过绑定进行处理。 例如

private void SQLQueryListView_OnItemTapped(object sender, ItemTappedEventArgs e)
{
    var param = (SQLQuery)e.Query;
    if (((ViewModel)BindingContext).RunQueryCommand.CanExecute(param))
    {
        ((ViewModel)BindingContext).RunQueryrCommand.Execute(param);
    }
}

如果每个查询返回不同结构或类型的数据,则显示结果数据时会出现困难。为此,您可能需要考虑为每组结果(每个结果都包含一个ListView)实现一个特定的ContentView,并根据运行的查询设置其可见性(如果一次只显示一个)