仅使用一个项目填充ListBox / View

时间:2015-06-25 11:17:18

标签: c# wpf listview wpf-controls

我有一个ListBox(或ListView)我想填充,但我的列表只包含1个这样的项目:(它来自我的Job类)< / p>

enter image description here

因此ListBox将有两列,有效1为键,1为值,然后是每行键/值对。

我似乎无法用一个只有1个项目的集合来解决这个问题,而不是很多项目。

编辑: 我已经有了我的Job Class,它是由Linq自动生成的。部分例外代码:

public partial class Job : INotifyPropertyChanging, INotifyPropertyChanged
{
 private int _Id;

 private string _Hostname;

 [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", DbType="Int NOT NULL", IsPrimaryKey=true)]
    public int Id
    {
        get
        {
            return this._Id;
        }
        set
        {
            if ((this._Id != value))
            {
                this.OnIdChanging(value);
                this.SendPropertyChanging();
                this._Id = value;
                this.SendPropertyChanged("Id");
                this.OnIdChanged();
            }
        }
    }

     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Hostname", DbType="NVarChar(50)")]
    public string Hostname
    {
        get
        {
            return this._Hostname;
        }
        set
        {
            if ((this._Hostname != value))
            {
                this.OnHostnameChanging(value);
                this.SendPropertyChanging();
                this._Hostname = value;
                this.SendPropertyChanged("Hostname");
                this.OnHostnameChanged();
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解你的问题,但让我们看看这个答案是否可以帮助你。因此,当我们在ListBox或类似项目中显示项目集合时,我们通常会声明DataTemplate来定义我们希望如何呈现数据项。然后,我们将DataTemplate应用于ListBox.ItemTemplate属性。

但是,当我们只想显示单个项目时,使用数据集合和某种ItemsControl毫无意义。相反,我们可以使用相同的DataTemplate,但只需将其应用于单个ContentControl即可。因此,ListBox用于多个项目,ContentControl用于呈现单个项目。试试这个:

Resources

<DataTemplate x:Key="YourDataTemplate" DataType="{x:Type YourPrefix:YourDataType}">
    <!-- Define how you want your object to be rendered here -->
    <!-- You can use a Grid or StackPanel to layout your item here -->
</DataTemplate>

然后在XAML中:

<ContentControl Content="{Binding YourSingleItemProperty}" 
    ContentTemplate="{StaticResource YourDataTemplate}" />

答案 1 :(得分:1)

将项目绑定到ListView非常简单易行。这只是一个例子,但它应该提供关于如何准确显示所需值的基本想法。

如果您已在XAML中定义ListView,请执行以下操作:

<ListView Name="listViewJobs">
    <ListView.View>
        <GridView>
           <GridViewColumn Header="Key" DisplayMemberBinding="{Binding Path=JobKey}" />
           <GridViewColumn Header="Value" DisplayMemberBinding="{Binding Path=JobValue}" />
       </GridView>
    </ListView.View>
</ListView>

Job具有将ListView列绑定到的属性(在本例中为JobKeyJobValue属性):

public class Job
{
    private string jobKey;
    private string jobValue;

    // Key property that will be displayed 
    public string JobKey
    {
        get { return jobKey; }
        set { jobKey = value; }
    }

    // Value property that will be displayed
    public string JobValue
    {
        get { return jobValue; }
        set { jobValue = value; }
    }

    public Job(string jobKey, string jobValue)
    {
        this.jobKey = jobKey;
        this.jobValue = jobValue;
    }
}

要在Jobs中显示ListView的列表,您需要做的就是:

// Create the new list
List<Job> listJob = new List<Job>();
// Create new Job and add it to the list
Job newJob = new Job("exampleKey", "exampleValue");
listJob.Add(newJob);

// Set the list as the source for our ListView
listViewJobs.ItemsSource = listJob;

Binding将负责将列链接到类中的属性,并显示您添加到源列表的所有项目中的选定值。