动态Listview内容WPF

时间:2018-02-16 22:49:04

标签: c# sql wpf listview mvvm

Hello Everyone我正在寻找一种在我的页面上创建ListView的方法,该方法将根据点击的按钮而改变。

例如,如果单击“查看用户”按钮,我希望列表视图显示“名字”姓氏“”电子邮件“,如果按下”查看项目“按钮,我希望列表视图显示”项目名称“”描述” ......

所有这些数据都是从SQL服务器上撤下的。我希望用户基本上能够通过单击按钮在我创建的不同SQL语句之间切换,并在ListView中显示结果。

我不确定ListView是否是最佳选择或如何处理此问题。我想在设计时仍然维护MVVM。我正在寻找一些正确方向的输入或点。

谢谢!

2 个答案:

答案 0 :(得分:0)

尝试创建User类。然后当您从dbo.Users SQL语句调用SELECT *并执行读取器时,您只需创建一个新的User对象,将所有sql数据解析为User对象(例如,名称的字符串,bday的日期时间等。 ..),并将所述User对象存储在运行sql语句时创建的List中。然后你可以编写一个foreach(User u in),在循环中创建一个字符串并将属性写入所述字符串,然后调用ListView.Items.Add()。只需格式化字符串,您希望如何实现所需的结果

答案 1 :(得分:0)

我最终做的是使用List视图样式数据触发器在两个不同的网格视图之间切换。在我的ViewModel中,我有一个名为ViewingProjects的布尔值,当按下我的按钮时,它被设置为true。这会在我绑定网格视图的两个不同项目源之间切换,当按下按钮时,我调用相应的GetUser()GetProject()函数,该函数更新我绑定的可观察集合,然后更新视图。

 <ListView 
                            Margin="0,50,0,0"  
                            VerticalAlignment="Stretch" 
                            HorizontalAlignment="Stretch" 
                            HorizontalContentAlignment="Stretch">
                            <ListView.Style>
                                <Style TargetType="ListView">
                                    <Setter Property="MaxHeight" Value="150"/>
                                    <Setter Property="ItemsSource" Value="{Binding Users}"/>
                                        <Setter Property="View">
                                        <Setter.Value>
                                            <GridView AllowsColumnReorder="True" ColumnHeaderToolTip="Users">
                                                <GridViewColumn Header="First Name" Width="Auto" DisplayMemberBinding="{Binding FirstName}"/>
                                                <GridViewColumn Header="Last Name" Width="Auto" DisplayMemberBinding="{Binding LastName}"/>
                                                <GridViewColumn Header="User Name" Width="Auto" DisplayMemberBinding="{Binding UserName}"/>
                                                <GridViewColumn Header="Email" Width="Auto" DisplayMemberBinding="{Binding Email}"/>
                                                <GridViewColumn Header="Employee Type" Width="Auto" DisplayMemberBinding="{Binding EmployeeType}"/>
                                            </GridView>
                                        </Setter.Value>
                                    </Setter>
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding ViewingProjects}" Value="True">
                                            <Setter Property="ItemsSource" Value="{Binding ProjectsCount}"/>
                                                <Setter Property="View">
                                                <Setter.Value>
                                                    <GridView AllowsColumnReorder="True" ColumnHeaderToolTip="Projects">
                                                        <GridViewColumn Header="Project Name" Width="Auto" DisplayMemberBinding="{Binding Project_Name}"/>
                                                        <GridViewColumn Header="Phase" Width="Auto" DisplayMemberBinding="{Binding Phase}"/>
                                                        <GridViewColumn Header="Hours Logged" Width="Auto" DisplayMemberBinding="{Binding Total_Hours_Worked}"/>
                                                        <GridViewColumn Header="Date Started" Width="Auto" DisplayMemberBinding="{Binding StartDate}"/>
                                                        <GridViewColumn Header="Proposed End Date" Width="Auto" DisplayMemberBinding="{Binding ProposedCompletionDate}"/>
                                                    </GridView>
                                                </Setter.Value>
                                            </Setter>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </ListView.Style>
                        </ListView>