【问题标题】:Populating columns of a window填充窗口的列
【发布时间】:2011-01-09 12:40:47
【问题描述】:

我想要做的是在一个窗口中填充两列。此列将具有全局变量的名称及其路径。我在窗口中显示我需要的内容时遇到问题。

        <TabItem Header="Global Variables" GotFocus="GlobalVariablesTab_GotFocus">
           <dc:TreeListView Name="tvwGlobalVariables"  dc:ColumnLayoutManager.Enabled="True" >
                <dc:TreeListView.Columns>

                    <!--First Column. -->
                   <dc:StdGridViewColumn Header="Variable" Width="200" >

                         <dc:StdGridViewColumn.CellTemplate>
                             <DataTemplate>
                                <TextBlock TextTrimming="CharacterEllipsis"/>
                            </DataTemplate>
                         </dc:StdGridViewColumn.CellTemplate>
                    </dc:StdGridViewColumn>

                    <!-- Second Column-->
                     <dc:StdGridViewColumn Header="Result" dc:ColumnRange.IsFillColumn="True"/>

               </dc:TreeListView.Columns> 
            </dc:TreeListView> 
        </TabItem>

这是包含我需要填充的区域的选项卡。第一列是名称,第二列是路径。我也可能遗漏了一些东西。

    private void GlobalVariablesTab_GotFocus(object sender, RoutedEventArgs e)
    {
        lvGlobals.Items.Clear();
        sman = SchemaManager.SchemaManager.GetInstance();
        IEnumerator enumerator = sman.GetGlobalVariableEnumerator();
        while (enumerator.MoveNext()) 
        {
            DictionaryEntry entry = (DictionaryEntry) enumerator.Current;
            ListViewItem lvi = new ListViewItem();//new string[] {entry.Key.ToString(), entry.Value.ToString()});
            lvi.Tag = entry.Key.ToString() + entry.Value.ToString();
        }
    }

目前我有 lvi 持有这两个部分,但我需要一个部分进入第一列,另一部分到另一列。如果我不需要它,我不打算保留 lvi。无论哪种方式,我都需要在第一列中显示entry.key,在第二列中显示entry.value。有什么想法吗?

【问题讨论】:

  • 如果有人需要更多信息,请告诉我,我添加了我认为相关的内容,但我对这一切了解不多,所以这只是一个假设。
  • 我可以给你代码在常规列表视图中显示两列。很难判断您的代码有什么问题,因为您使用的专有 TreeListView 甚至可能无法正常工作。但只是通过查看您的代码进行猜测,我发现了两个潜在问题。首先,如果您为 CellTemplates 使用数据模板,您希望使用数据绑定而不是与 ListViewItems 混淆。在 ListViewItems 上设置 Tag 将不会显示任何内容。
  • 我只能显示两列我想写给那些列,你能解释一下怎么做吗?

标签: c# wpf data-binding treeviewitem treelistview


【解决方案1】:

我不知道 SchemaManager 是什么,所以我只是使用带有一些虚拟数据的 Hashtable 来获取带有一些字典条目的枚举器。下面的示例代码使用带有两列的常规 WPF 列表视图,没有格式化以保持简单。

XAML:

<Window x:Class="TwoColsDemo.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300">

    <ListView ItemsSource="{Binding Path=Data}">
        <ListView.View>
            <GridView>
                <GridView.Columns>
                    <GridViewColumn Header="Key" DisplayMemberBinding="{Binding Path=Key}" />
                    <GridViewColumn Header="Value" DisplayMemberBinding="{Binding Path=Value}" />
                </GridView.Columns>
            </GridView>
        </ListView.View>
    </ListView>
</Window>

后面的代码:

using System.Collections;
using System.Collections.Generic;
using System.Windows;

namespace TwoColsDemo
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            Hashtable sman = new Hashtable();
            sman.Add("Key1", "Value1");
            sman.Add("Key2", "Value2");

            Data = new List<DictionaryEntry>();

            IEnumerator enumerator = sman.GetEnumerator();
            while (enumerator.MoveNext())
            {
                DictionaryEntry entry = (DictionaryEntry)enumerator.Current;
                Data.Add(entry);
            }

            DataContext = this;
        }

        public List<DictionaryEntry> Data { get; private set; }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多