1

我整天都在尝试这个,但没有任何运气。我能够显示 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; }
}

下面是我如何称呼它:

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>

编辑我还想补充一点:

  1. 它不会显示正确的尺寸
  2. 我什至看不到表格上的列标题
  3. 也没有数据更新。

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

4

5 回答 5

1

如果没有看到您的所有代码,我无法判断这是否是问题(或唯一问题),但您需要绑定DataContext属性。您的列表视图知道列绑定到某些属性,但他们不知道这些属性来自哪里(类)。

您还需要查看 INotifyPropertyChanged (可能不是这个项目,但一般来说)。这有点解释,所以你可以看看它做了什么,但它是 WPF 绑定的重要组成部分。

http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.datacontext.aspx

你最好的办法是找到一个关于绑定和如何设置你的列表视图的好教程。如果没有一些背景知识,很难真正弄清楚。无论如何,这是给我的。希望这会有所帮助。

于 2012-05-17T19:23:45.877 回答
0

我不是 XAML 专业人士,但在文档中他们有不同的绑定文本:http: //msdn.microsoft.com/en-us/library/ms750972.aspx

尝试

DisplayMemberBinding="{Binding Path=StudentID}"
于 2012-05-17T18:49:54.193 回答
0

正如其他几张海报指出的那样,您需要设置 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">

另一个问题是您没有尝试显示控件。下面的代码创建一个窗口对象并将您创建的控件作为内容放置。之后,您只需调用 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();
}
于 2012-05-18T13:09:42.067 回答
0

你试过改变

public struct Data 

进入

public class Data

我今天整天都在研究 ListView,如果我能说一件事,那就是它很挑剔。它可能只是不想接受结构。

编辑:这是我的工作 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>
于 2012-05-17T19:04:52.013 回答
0

我认为您需要将 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">
于 2012-05-17T19:30:47.273 回答