动态地将可单击列表项添加到Windows Phone ListBox

时间:2012-06-25 11:00:12

标签: c# windows-phone-7

据我所知,如果有一个listBox,可以轻松地向它添加项目:

ListBox myList = new ListBox();
myList.Items.Add("Added Item 1");
myList.Items.Add("Added Item 2");
myList.Items.Add("Added Item 3");

我最初不知道将有多少项添加到列表中,所以我不像我在这里那样添加静态内容,我遍历for循环并以这种方式添加项目。继续......

我怎样才能将项目添加到列表框中,还可以使每个项目都可以点击。例如,假设有一个包含12个GUID的数组,并为每个guid项添加到listBox .i.e。

myList.Items.Add(guidArray[i]);

然后根据选择的guid做出不同的反应?

另外一件事,一个样式listBox项目怎么样?除了他们只是表现为相互堆叠的无聊的弦?

提前致谢!

1 个答案:

答案 0 :(得分:4)

假设您有一组GUID。

var guids = new List<Guid>();
for (var i = 0; i < 12; i++)
{
    guids.Add(Guid.NewGuid());
}

然后,您可以将此集合绑定到ListBox控件。

myList.ItemsSource = guids;

ListBox控件将根据guids集合的内容自动更新。

要处理ListBox中项目的click事件,您需要处理控件的SelectionChanged事件。

连接事件处理程序。

<ListBox Name="MyList" 
         SelectionChanged="MyList_SelectionChanged">
...
</ListBox>

现在,您可以在事件处理程序中编写必要的代码:

private void MyList_SelectionChanged(object sender, 
    System.Windows.Controls.SelectionChangedEventArgs e)
{
    // Find out which item was clicked
    if (e.AddedItems.Count > 0)
    {
        var myGuid = e.AddedItems[0] as Guid;
        if (myGuid == null)
            return;
        // ...
    }
}

设置ListBox中的每个项目的样式。那是另一个问题。首先将ListBox绑定到数据源(在本例中为GUID集合)。

然后在XAML中,您可以自由设计ListBox的内容。使用ListBox的ItemTemplate和DateTemplate。在模板中,您可以指定ListBox应为每个项目呈现的内容。

让我们为每个项目在1x1网格中渲染一个TextBlock。只需将TextBlock的Text属性绑定到ListBox项的属性之一。

<ListBox Name="MyList" 
     SelectionChanged="MyList_SelectionChanged">
    <ListBox.ItemTemplate>
       <DataTemplate>               
           <Grid>
               <Grid.ColumnDefinitions>
                   <ColumnDefinition Width="*" />
                   <ColumnDefinition Width="*" />
               </Grid.ColumnDefinitions>

               <Grid.RowDefinitions>
                   <RowDefinition Height="*" />
               </Grid.RowDefinitions>

               <TextBlock Grid.Column="1" Text="{Binding ...}" />
           </Grid> 
       </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>