0

何が起こっているのかを説明できる唯一の方法は画像なので、これが表示されることを願っています。私の問題はアイテムソース内にあると思います。これらをリストボックスに入れ、メールリストに空白がないため、col1 に名前、および col2 には電子メールが表示されますが、同じ行ではなく、すべてが押し下げられます。

ここにxamlがあります

    <Window x:Class="test.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="492" Width="865" ResizeMode="CanMinimize">
<Grid>
    <Label Content="Name" Height="28" HorizontalAlignment="Left" Margin="12,12,0,0" Name="label1" VerticalAlignment="Top" IsEnabled="False" />
    <TextBox Height="23" HorizontalAlignment="Left" Margin="12,46,0,0" Name="textBox1" VerticalAlignment="Top" Width="180" />
    <Label Content="Email" Height="28" HorizontalAlignment="Left" Margin="12,138,0,0" Name="label3" VerticalAlignment="Top" IsEnabled="False" />
    <TextBox Height="23" HorizontalAlignment="Left" Margin="12,172,0,0" Name="textBox3" VerticalAlignment="Top" Width="180" />
    <Label Content="Website" Height="28" HorizontalAlignment="Left" Margin="12,75,0,0" Name="label4" VerticalAlignment="Top" IsEnabled="False" />
    <TextBox Height="23" HorizontalAlignment="Left" Margin="12,109,0,0" Name="textBox4" VerticalAlignment="Top" Width="180" />
    <Calendar Height="170" HorizontalAlignment="Left" Margin="12,235,0,0" Name="calendar1" VerticalAlignment="Top" Width="180" />
    <Label Content="Send Date" Height="28" HorizontalAlignment="Left" Margin="12,203,0,0" Name="label2" VerticalAlignment="Top" IsEnabled="False" />
    <TabControl Height="391" HorizontalAlignment="Left" Margin="225,14,0,0" Name="tabControl1" VerticalAlignment="Top" Width="606">
        <TabItem Header="My" Name="tabItem1" IsEnabled="True">
            <Grid>
                <ListView Height="359" ItemsSource="{Binding Tab1Collection}" HorizontalAlignment="Left" Name="listView1" VerticalAlignment="Top" Width="596">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn DisplayMemberBinding="{Binding name1}" Header="Name" Width="150" />
                            <GridViewColumn DisplayMemberBinding="{Binding email1}" Header="Email" Width="255" />
                            <GridViewColumn DisplayMemberBinding="{Binding website1}" Header="Website" Width="200" />
                        </GridView>
                    </ListView.View>
                </ListView>
            </Grid>
        </TabItem>
        <TabItem Header="Finished" Name="tabItem2" IsEnabled="true">
            <Grid>
                <ListView Height="359" HorizontalAlignment="Left" Name="listView2" VerticalAlignment="Top" Width="596">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Header="Name" Width="150" />
                            <GridViewColumn Header="Email" Width="150" />
                            <GridViewColumn Header="Website" Width="150" />
                            <GridViewColumn Header="Delivered On" Width="150" />
                        </GridView>
                    </ListView.View>
                </ListView>
            </Grid>
        </TabItem>
        <TabItem Header="Results" Name="tabItem3" IsEnabled="False">
            <Grid />
        </TabItem>
        <TabItem Header="Directory" Name="tabItem4" IsEnabled="true" IsSelected="True">
            <Grid Height="362"></Grid>
        </TabItem>
    </TabControl>
    <Button Content="Add Contact" Height="29" HorizontalAlignment="Left" Margin="97,411,0,0" Name="button1" VerticalAlignment="Top" Width="95" />
</Grid>

ここにコードがあります

    private List<string> names = new List<string>();
    private List<string> Emails = new List<string>();

    public MainWindow()
    {
        InitializeComponent();
        names.Add("test123");
        names.Add("test123");
        names.Add("test123");
        names.Add("tst123");
        names.Add("test123");
        names.Add("tst123");

        Emails.Add("test123@Gmail.com");
        Emails.Add("test123@Gmail.com");
        Emails.Add("test123@Gmail.com");
        Emails.Add("test123@Gmail.com");
        Emails.Add("test123@Gmail.com");
        Emails.Add("test123@Gmail.com");

        foreach(var n in names) {
            listView1.Items.Add(new {name1 = n});
        }

        foreach(var e in Emails) {
            listView1.Items.Add(new {email1 = e});
        }








    }

これは何が起こっているかを説明するための画像です。すべてが同じ行にあるはずです。

http://i.stack.imgur.com/4Uknl.png

4

2 に答える 2

1

2 つの異なる を管理Listしていて、それらをマージしているのではなく、1 つのリストを挿入してから別のリストを挿入しています。

List2つの の数が同じであることを考慮するとItems、次のようなことができます

for(int index = 0; index < names.Count;index++)
{
     listView1.Items.Add(new {email1 = Emails[index], name1 = names[index] });
}

構文とプロパティを覚えていないListので、これが機能しない場合 (またはより良いオプションである場合) は編集してください

于 2012-08-30T19:13:05.640 に答える
1

2 つの異なるコレクションを listView に追加して、それぞれを個別に繰り返し処理するので、見ている効果が得られることは明らかです。

name2 つのプロパティを持つクラスを作成し、このクラスemailにバインドする必要がありますListView。何かのようなもの:

public class Person
{
     public Person(string name,string email)
     { 
         Name=name;
         Email=email;
     }
     public string Name {get;set;}
     public string Email {get;set;}
}


List<Person> people = {new Person("name1","test1@gmail.com"
                      ,new Person("name2","test2@gmail.com"
                      ,new Person("name3","test3@gmail.com"
                      ,new Person("name4","test4@gmail.com")};

これで、次のようにリストビューを単純にバインドできます。

listView1.ItemsSource=people;
于 2012-08-30T19:17:55.523 に答える