XAML Collection数据绑定

时间:2014-02-12 15:47:00

标签: c# windows xaml windows-store-apps

我正在制作简单的纸牌游戏,请您介绍如何实例化收藏并添加内容。

这是我的基本Card类和Cards类,其中包含ObservableList of Cards

class Card
{
    public String Name { get; set; }
}

class Cards
{
    public ObservableCollection<Card> CardCollection { get; set; }
}

这是我的XAML,请注意绑定没问题但列表为空我不知道如何在列表中添加项目。

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid.DataContext>
        <local:Cards x:Name="Cards"></local:Cards>
    </Grid.DataContext>
    <TextBlock Text="Cards"
               FontFamily="Segoe UI"
               FontSize="42"></TextBlock>
    <ListView Margin="10,60,10,10" ItemsSource="{Binding CardCollection}">
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapGrid/>
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid Height="50" Background="White">
                    <TextBlock Text="{Binding Name}"/>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>

2 个答案:

答案 0 :(得分:0)

我找到了答案。 必须先实例化Collection属性,然后才能使用它。 我已将它添加到我的卡类的构造函数中

class Cards
{
    public ObservableCollection<Card> CardCollection { get; set; }

    public Cards()
    {
        CardCollection = new ObservableCollection<Card>();
    }
}

答案 1 :(得分:0)

您也可以这样做。

class Cards
{
    private ObservableCollection<Card> _CardCollection = new ObservableCollection<Card>();

    public  ObservableCollection<Card> CardCollection
    {
        get
        { 
            return _CardCollection;
        }

        set
        {
              _CardCollection=value;
              OnPropertyChanged("CardCollection");  //Implement property changed event  
        }
    }
}

注意:如果您希望propertychanged反映您已绑定的ListView中的更改,则可能必须实施ObservableCollection事件。

修改:您可以从ObservableCollectionAdd()方法添加和删除Remove()中的项目。请查看此页面,了解ObservableCollection http://msdn.microsoft.com/en-us/library/ms668604(v=vs.110).aspx

的所有可用方法

您可以像这样添加项目到集合

CardCollection.Add(new Card{Name="Ace of spades"});

编辑2:

是的,您可以使用实现ICommand接口并将命令绑​​定到控件。看一下这个http://www.markwithall.com/programming/2013/03/01/worlds-simplest-csharp-wpf-mvvm-example.html

如果您只想将实例绑定到XAML。您可以在Mainpage.xaml.cs

中像这样访问它
var bind = (Cards)DataContext;

您可以像bind.CardCollection

一样获取绑定集合