我有一个基于这些数据的可观察的集合:
可能添加了更多新数据,因此数据中的行数可能有所不同(有时是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并显示数据吗?
最终结果示例:
答案 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,并根据运行的查询设置其可见性(如果一次只显示一个)