列表视图在运行时不会更新
本文关键字:更新 运行时 视图 列表 | 更新日期: 2023-09-27 18:34:35
我整天都在尝试这个,但没有任何运气。我能够显示用户控件,但我无法弄清楚为什么列不会显示,即使我在 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; }
}
以下是我的称呼:
class Program
{
[STAThread]
static void Main(string[] args)
{
DisplayData displayData = new DisplayData();
displayData.AddDataToList(2, "John");
System.Threading.Thread.Sleep(5000);
}
}
和 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 用户控件添加到我的现有项目中。
如果没有看到您的所有代码,我无法判断这是否是问题(或唯一的问题(,但您需要绑定 DataContext
属性。您的列表视图知道列绑定到某些属性,但它们不知道这些属性来自何处(类(。
您还需要研究INotifyPropertyChanged(也许不是针对此项目,但通常也是如此(。这有点解释,因此您可以查找它的作用,但它是 WPF 绑定的重要组成部分。
http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.datacontext.aspx
最好的办法是找到一个关于绑定以及如何设置列表视图的好教程。如果没有一些背景知识,很难真正弄清楚。无论如何,这是给我的。希望这是有帮助的。
我不是 XAML 专业人士,但在文档中,他们有不同的绑定文本:http://msdn.microsoft.com/en-us/library/ms750972.aspx
尝试
DisplayMemberBinding="{Binding Path=StudentID}"
我认为您需要将DataContext绑定到代码隐藏。 见下文。
<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">
您是否尝试过更改
public struct Data
到
public class 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(如 figabytes 答案(:
<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">
另一个问题是您没有尝试显示控件。下面的代码创建一个窗口对象,并将您创建的控件作为内容放置。之后,您只需调用 Show(( 或 ShowDialog((,您应该是您的工作结果。
[STAThread]
static void Main(string[] args)
{
DisplayData displayData = new DisplayData();
displayData.AddDataToList(2, "John");
Window window = new Window();
window.Content = displayData;
window.ShowDialog();
}