C# ListView在运行时不更新

C# ListView在运行时不更新,c#,wpf,xaml,listview,C#,Wpf,Xaml,Listview,我已经试了一整天了,但是运气不好。我能够显示UserControl,但我无法理解为什么即使在XAML中设置了列,也无法显示这些列。此外,我不确定数据是否显示,因为表单打开时是空白的 这是我从另一个程序调用的类库的一部分。但是,它总是显示一个空白表单,并且没有任何内容被更新 下面是我的用户控制代码 public partial class DisplayData : UserControl { ObservableCollection<Data> _DataCollection

我已经试了一整天了,但是运气不好。我能够显示UserControl,但我无法理解为什么即使在XAML中设置了列,也无法显示这些列。此外,我不确定数据是否显示,因为表单打开时是空白的

这是我从另一个程序调用的类库的一部分。但是,它总是显示一个空白表单,并且没有任何内容被更新

下面是我的用户控制代码

public partial class DisplayData : UserControl
{
    ObservableCollection<Data> _DataCollection = new ObservableCollection<Data>();

    public DisplayData()
    {
        InitializeComponent();

        Window window = new Window();
        window.Content = new UserControl();
        window.Show();
    }

    public void AddDataToList(int ID, string Name)
    {
        _DataCollection.Add(new Data
        {
            StudentID = ID,
            StudentName = Name
        });
    }

    public ObservableCollection<Data> DataCollection { get { return _DataCollection; } }
}

public struct Data
{
    public int StudentID { get; set; }
    public string StudentName { get; set; }
}
以及xaml:

<UserControl x:Class="ConsoleApplication1.DisplayData"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="100" d:DesignWidth="210">
    <StackPanel>
        <ListView ItemsSource="{Binding DataCollection}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="100" Header="ID" DisplayMemberBinding="{Binding StudentID}"  />
                    <GridViewColumn Width="100" Header="Name" DisplayMemberBinding="{Binding StudentName}" />
                </GridView>
            </ListView.View>
        </ListView>
    </StackPanel>
</UserControl>

编辑 我还要补充一点:

  • 它不会告诉我正确的尺寸
  • 我甚至看不到表单上的列标题
  • 也没有数据更新

  • 另外,不确定这是否有帮助,但我已将其作为WPF UserControl添加到现有项目中。

    我不是XAML专业人士,但在文档中,它们有不同的绑定文本:

    试一试


    我不是XAML专业人士,但在文档中,他们有不同的绑定文本:

    试一试


    你试过换衣服吗

    public struct Data 
    
    进入

    我今天也在ListView上工作了一整天,如果有一件事我可以说的话,那就是它很挑剔。它可能只是不想接受结构

    编辑:这是我的工作列表视图

    <ListView Grid.Column="2" HorizontalAlignment="Stretch" Margin="0" Name="listTableItem" VerticalAlignment="Stretch">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Name"
                    DisplayMemberBinding="{Binding Name}"
                    Width="75"
                />
                <GridViewColumn Header="Value"
                    DisplayMemberBinding="{Binding Value}"
                    Width="500"
                />
            </GridView>
        </ListView.View>
    </ListView>
    

    您是否尝试过更改

    public struct Data 
    
    进入

    我今天也在ListView上工作了一整天,如果有一件事我可以说的话,那就是它很挑剔。它可能只是不想接受结构

    编辑:这是我的工作列表视图

    <ListView Grid.Column="2" HorizontalAlignment="Stretch" Margin="0" Name="listTableItem" VerticalAlignment="Stretch">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Name"
                    DisplayMemberBinding="{Binding Name}"
                    Width="75"
                />
                <GridViewColumn Header="Value"
                    DisplayMemberBinding="{Binding Value}"
                    Width="500"
                />
            </GridView>
        </ListView.View>
    </ListView>
    

    在没有看到所有代码的情况下,我无法判断这是否是问题(或唯一的问题),但您需要绑定
    DataContext
    属性。您的listview知道这些列绑定到某些属性,但它们不知道这些属性来自何处(类)

    您还需要研究INotifyPropertyChanged(可能不适用于此项目,但一般而言)。这有点需要解释,所以您可以查看它的功能,但它是WPF绑定的一大部分


    最好的办法是找到一本关于绑定和如何设置listview的好教程。如果没有一些背景知识,真的很难理解。反正是给我的。希望这有帮助。

    在没有看到所有代码的情况下,我无法判断这是否是问题(或唯一的问题),但您需要绑定
    DataContext
    属性。您的listview知道这些列绑定到某些属性,但它们不知道这些属性来自何处(类)

    您还需要研究INotifyPropertyChanged(可能不适用于此项目,但一般而言)。这有点需要解释,所以您可以查看它的功能,但它是WPF绑定的一大部分


    最好的办法是找到一本关于绑定和如何设置listview的好教程。如果没有一些背景知识,真的很难理解。反正是给我的。希望这有帮助。

    我认为您需要将DataContext绑定到codebehind。见下文

    <UserControl x:Class="ConsoleApplication1.DisplayData"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             DataContext="{Binding RelativeSource={RelativeSource Self}}" 
             mc:Ignorable="d" 
             d:DesignHeight="100" d:DesignWidth="210">
    

    我认为您需要将DataContext绑定到codebehind。见下文

    <UserControl x:Class="ConsoleApplication1.DisplayData"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             DataContext="{Binding RelativeSource={RelativeSource Self}}" 
             mc:Ignorable="d" 
             d:DesignHeight="100" d:DesignWidth="210">
    

    正如其他几张海报所指出的,您需要设置DataContext(如figabytes答案所示):


    正如其他几张海报所指出的,您需要设置DataContext(如figabytes答案所示):


    谢谢你的回复。我也尝试过添加路径,但是表单显示时没有数据。此外,该形状比我设置的尺寸(200x100)大得多。不知道为什么会这样。。另外,我不想完全相信上面的代码。我今天在这里学习它:但是被卡住了。我还想补充一点,我在Windows ListView上也尝试了同样的方法,我能够更新数据(使用.update())并正确显示它。我不知道为什么它对WPF不起作用。@Vicky不要期望winform控件和WPF控件之间有相似之处,你不会失望的。@Yatrix:我昨天开始了WPF的自我训练,我想为什么不把ListView作为第一课。我已经为此奋斗了10多个小时,但运气不佳:(@Vicky WPF非常棒、灵活而且强大。只要把你的WinForm知识和WPF一起扔掉就行了。当你习惯了它,你会喜欢它的,但它非常非常不同。谢谢你的回复。我刚刚尝试添加了路径,但表单显示时没有数据。而且,表单比我设置的维度(200x100)大得多。不知道为什么会发生这种情况。。此外,我不想完全相信上面的代码。我今天在这里学习了它:但遇到了严重的问题。我还想补充一点,我在Windows ListView上也尝试了同样的方法,并且我能够更新其中的数据(使用.update())我不知道为什么它对WPF不起作用。@Vicky不要期望winform控件和WPF控件之间有相似之处,你不会失望的。@Yatrix:我昨天开始了WPF的自我训练,我想为什么不把ListView作为第一课。我已经为此奋斗了10多个小时,但运气不佳:(@Vicky WPF非常棒、灵活而且强大。只要把你的WinForm知识和WPF一起扔掉就行了。当你习惯它的时候,你会喜欢它的,但是它非常非常不同。大卫:是的,我读了你的答案,并把它改成了类。但是,它仍然不起作用。1.它不会显示我正确的大小。2.我甚至看不到上面的列标题表单.3.也没有数据更新。:(仔细查看您的代码后,我认为我的示例可能不起作用,因为我正在手动向TreeView.items添加项,而您使用的是数据源。我包含了我的工作ListView代码,以便您可以进行比较。希望是这样
    <UserControl x:Class="ConsoleApplication1.DisplayData"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             DataContext="{Binding RelativeSource={RelativeSource Self}}" 
             mc:Ignorable="d" 
             d:DesignHeight="100" d:DesignWidth="210">
    
    [STAThread]
    static void Main(string[] args)
    {
            DisplayData displayData = new DisplayData();
            displayData.AddDataToList(2, "John");
    
            Window window = new Window();
            window.Content = displayData;
    
            window.ShowDialog();
    }