将datatable绑定到listview wpf mvvm

将datatable绑定到listview wpf mvvm,wpf,listview,Wpf,Listview,我已经尝试了stackoverflow上提供的几乎所有解决方案,但似乎无法使其发挥作用。我是wpf和mvvm新手,正在尝试将datatable绑定到listview,下面是我的代码 //code for viewmodel public DataTable RetrieveDetails { get { DataTable users = new DataTable();

我已经尝试了stackoverflow上提供的几乎所有解决方案,但似乎无法使其发挥作用。我是wpf和mvvm新手,正在尝试将datatable绑定到listview,下面是我的代码

//code for viewmodel
public DataTable RetrieveDetails
        {

            get
            {
                DataTable users = new DataTable();
                string dataBaseName = "name.db3";
                using (SQLiteConnection connection = new SQLiteConnection("Data Source=" + dataBaseName + "; Version=3;"))
                {                    
                    var details = "SELECT * FROM users";                    
                    connection.Open();
                    SQLiteCommand cmd = new SQLiteCommand(details, connection);
                    cmd.ExecuteNonQuery();
                    SQLiteDataAdapter adapter = new SQLiteDataAdapter(details, connection);
                    adapter.SelectCommand.CommandTimeout = 120;
                    DataSet ds = new DataSet();
                    adapter.Fill(ds);
                    return ds.Tables[0];

                }
            }

        }
下面是如何将datatable绑定到列表视图

<ListView x:Name="FormOneView" ItemsSource="{Binding Path=RetrieveDetails}">
                            <ListView.View>
                            <GridView>
                                <GridViewColumn DisplayMemberBinding="{Binding FirstName}" Header="First Name" />
                            </GridView>
                            </ListView.View>
                        </ListView>

我知道这应该很简单,但我很难显示数据。

试试这种方法:

<ListView x:Name="FormOneView" ItemsSource="{Binding}" DataContext="{Binding Path=allData}" HorizontalAlignment="Left" Height="100" Margin="243,289,0,0" VerticalAlignment="Top" Width="191">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Time" Width="50" DisplayMemberBinding="{Binding Path=Tid}"/>
            <GridViewColumn Header="Acceleration" Width="70" DisplayMemberBinding="{Binding Path=Acceleration}"/>
        </GridView>
    </ListView.View>
</ListView>
然后在类中添加以下方法。您的类应该继承InotifyPropertyChanged (您的类名:InotifyPropertyChanged)否则它将无法工作

private DataView _allData;
public DataView allData
{
    get { return _allData; }
    set
    {
        if (value != _allData)
        {
            _allData = value;
            OnPropertyChanged("allData");
        }
    }
}

public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propName)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(propName));
    }
}
结果是:

试试这种方法:

<ListView x:Name="FormOneView" ItemsSource="{Binding}" DataContext="{Binding Path=allData}" HorizontalAlignment="Left" Height="100" Margin="243,289,0,0" VerticalAlignment="Top" Width="191">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Time" Width="50" DisplayMemberBinding="{Binding Path=Tid}"/>
            <GridViewColumn Header="Acceleration" Width="70" DisplayMemberBinding="{Binding Path=Acceleration}"/>
        </GridView>
    </ListView.View>
</ListView>
然后在类中添加以下方法。您的类应该继承InotifyPropertyChanged (您的类名:InotifyPropertyChanged)否则它将无法工作

private DataView _allData;
public DataView allData
{
    get { return _allData; }
    set
    {
        if (value != _allData)
        {
            _allData = value;
            OnPropertyChanged("allData");
        }
    }
}

public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propName)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(propName));
    }
}
结果是:


要使上述代码正常工作,需要添加以下代码行
listview.datacontext=包含alldata.alldata的类要使上述代码正常工作,需要添加以下代码行
listview.datacontext=包含alldata.alldata的类。该代码示例包括一个DataTable。它们需要在FormOneView ListView上设置DataContext属性。也许代码示例可以更精确地说明这一点。代码示例包括一个数据表。它们需要在FormOneView ListView上设置DataContext属性。也许代码示例可以更精确地显示这一点。