Listview绑定问题

时间:2015-06-26 13:09:43

标签: c# xaml windows-store-apps

我有以下课程:

class MyViewModel
{
    public List<MyItem> MyItems { get; set; }
    public int Width { get; set; }
}

class MyItem
{
    public string Name {get; set;}
}

如您所见,在同一个名为MyViewModel的类中有MyItems和Width属性列表。如何将该列表中的单个元素绑定到XAML中的Text属性,将ViewModel中的Width绑定到XAML的Width属性?这是我的尝试,但我不能同时绑定这两个属性。我的意思是,我可以将整个列表绑定到Text属性,但我不知道如何绑定单个项目。

<ListView ItemsSource="{Binding MyViewModel}">
<ListView.ItemTemplate>
    <DataTemplate>
        <Grid Height="15" Width="520">
            <TextBlock Width="{Binding Width}" Text="{Binding=MyItems.Name(?)}" />
        </Grid>
    </DataTemplate>
</ListView.ItemTemplate>

1 个答案:

答案 0 :(得分:0)

你应该修改你的设计,但是这里有一个快速修复:只引入一个readonly属性,它返回第一个元素,所以你将拥有它(假设MyItems总是至少有元素,否则你会得到一个异常):

class MyViewModel
{
    public List<MyItem> MyItems { get; set; }

    public int Width { get; set; }

    public MyItem FirstElement { get { return MyItems[0]; } }
}

在你的xaml中,你将TextBlock绑定到这个属性:

<ListView ItemsSource="{Binding MyViewModel}">
<ListView.ItemTemplate>
    <DataTemplate>
        <Grid Height="15" Width="520">
            <TextBlock Width="{Binding Width}" Text="{Binding=FirstElement}" />
        </Grid>
    </DataTemplate>
</ListView.ItemTemplate>

有点offtopic,但仍然很重要:viewmodel类经常实现INotifyPropertyChanged,因此视图将能够自动更新。出于同样的原因,List<T>应替换为ObservableCollection<T>