0

データが表示されない理由を特定できません。これが私の xaml.cs ファイルです。コンパイルして正常に実行されるため、参照を省略しました。

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        string[] firstRecord = new string[3] {"1", "2", "3"};
        listview1.Items.Add(firstRecord);

    }
}

ここにxamlがあります

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="300" Width="400">
<Grid>
    <ListView Name="listview1">

        <ListView.View>

            <GridView AllowsColumnReorder="true"
          ColumnHeaderToolTip="Employee Information">

                <GridViewColumn DisplayMemberBinding=
                      "{Binding Path=listview1.Items[0]}" 
                  Header="Column1" Width="100"/>

                <GridViewColumn DisplayMemberBinding=
                      "{Binding Path=listview1.Items[1]}" 
                  Header ="2nd Column" Width="100">
                </GridViewColumn>

                <GridViewColumn DisplayMemberBinding=
                      "{Binding Path=listview1.Items[2]}" 
                  Header="3rd Column" Width="100"/>
            </GridView>

        </ListView.View>
    </ListView>
</Grid>
</Window>
4

3 に答える 3

2

バインディングにを追加した場合Array、必要なインデックスのみが必要ですListViewColumn

<ListView Name="listview1">
    <ListView.View>
        <GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Employee Information">
            <GridViewColumn DisplayMemberBinding="{Binding Path=[0]}" Header="Column1" Width="100"/>
            <GridViewColumn DisplayMemberBinding="{Binding Path=[1]}" Header ="2nd Column" Width="100" />
            <GridViewColumn DisplayMemberBinding="{Binding Path=[2]}" Header="3rd Column" Width="100"/>
        </GridView>
    </ListView.View>
</ListView>

結果:

ここに画像の説明を入力

DataBinding を使用する

ただし、コード内のコントロールにアクセスするのは悪い習慣であるため、 を使用DataBindingする必要があります。ListViewUIWPF

これは、文字列配列の適切なバインディングの例です

Xaml:

<Window x:Class="WpfApplication9.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Name="UI">
    <Grid>
        <ListView ItemsSource="{Binding ElementName=UI, Path=Records}">
            <ListView.View>
                <GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Employee Information">
                    <GridViewColumn DisplayMemberBinding="{Binding Path=[0]}" Header="Column1" Width="100"/>
                    <GridViewColumn DisplayMemberBinding="{Binding Path=[1]}" Header ="2nd Column" Width="100" />
                    <GridViewColumn DisplayMemberBinding="{Binding Path=[2]}" Header="3rd Column" Width="100"/>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>

コード:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        Records.Add(new string[3] { "1", "2", "3" });
        Records.Add(new string[3] { "10", "20", "30" });
        Records.Add(new string[3] { "100", "200", "300" });
    }

    private ObservableCollection<string[]> _records = new ObservableCollection<string[]>();
    public ObservableCollection<string[]> Records
    {
        get { return _records; }
        set { _records = value; }
    }
}

結果

ここに画像の説明を入力

于 2013-03-07T00:40:17.193 に答える
0

リストビューでは、文字列配列を使用してもあまり良い結果が得られません。オブジェクトを作成してそれにバインドすると、次のようになります。

class Item
{
    public string Item1 { get; set; }
    public string Item2 { get; set; }
    public string Item3 { get; set; }
}

次に、次のように UI に追加できます。

listview1.Items.Add(new Item() { Item1 = "1", Item2 = "2", Item3 = "3" });

次に、各列をオブジェクトの文字列プロパティにバインドします。

<ListView Name="listview1">
    <ListView.View>
        <GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Employee Information">
            <GridViewColumn DisplayMemberBinding="{Binding Item1}"
            Header="Item1" Width="100"/>
            <GridViewColumn  DisplayMemberBinding="{Binding Item2}"
            Header ="Item2" Width="100"/>
            <GridViewColumn   DisplayMemberBinding="{Binding Item3}"
            Header="Item3" Width="100"/>
        </GridView>
    </ListView.View>
</ListView>
于 2013-03-07T00:05:27.090 に答える
-1

バインディングが間違っています。

最初の列にバインドします。

{Binding Path=listview1.Items[0]}

{"1"、 "2"、 "3"}はアイテムリストに最初のアイテムとして追加する文字列配列であるため、"1"の代わりに{"1"、 "2"、"3"}が含まれます。 。

良いでしょう

{Binding Path=listview1.Items[0][0]}

最初の場合ですが、これは常に最初のリストアイテムのみをバインドします。

しかし、確かにあなたは今欠点を見ますか?

たぶんあなたがバインドするだけなら

{Binding Path=listview1.Items}

2次元データはリストビューの2次元データパターンにも適合するため、コントロールは何をすべきかを認識しています。(しかし、私はまだこれを使用しておらず、正確にはわかりません。)

于 2013-03-06T23:57:37.990 に答える