我正在按照MVVM模式学习WPF,我在XAML中遇到了一个问题,我正在为我的网格绑定ItemSource。目前,我将每个列绑定到我的模型中存在的公共属性,该属性正常。
我遇到的问题是我不知道绑定Grids ItemSource的内容,因为之前我已经将它绑定到一个Property,但是这样做只会显示该属性的数据,是否有我可以绑定这个,所以我可以显示两列的数据。 谢谢,
MainWindow.Xaml
<ListView Name="UserGrid" Grid.Row="1" Margin="4,178,12,13" ItemsSource="{Binding ClientRatesPreAwr}" >
<ListView.View>
<GridView x:Name="grdTest">
<GridViewColumn Header="PreAWR" DisplayMemberBinding="{Binding ClientRatesPreAwr}" Width="50"/>
<GridViewColumn Header="PostAWR" DisplayMemberBinding="{Binding ClientRatesPostAwr}" Width="50"/>
</GridView>
</ListView.View>
</ListView>
型号:
public string ClientRatesPreAwr
{
get { return _ClientRatePreAWR; }
set
{
_ClientRatePreAWR = value;
OnPropertyChanged("ClientRatesPreAWR");
}
}
public string ClientRatesPostAwr
{
get { return _ClientRatePostAWR; }
set
{
_ClientRatePostAWR = value;
OnPropertyChanged("ClientRatesPostAwr");
}
}
答案 0 :(得分:1)
ListView ItemSsource应该绑定到模型/视图模型中的(ClientRates?)项集合,而不是单个属性。
答案 1 :(得分:1)
您必须将ListView绑定到ObservableCollection<T>
,例如以下示例
<ListView Name="Items" ItemsSource={Binding Items}>
<ListView.View>
<GridView>
<GridViewColumn Width="200" Header="First name" DisplayMemberBinding="{Binding FirstName}"></GridViewColumn>
<GridViewColumn Width="200" Header="Last name" DisplayMemberBinding="{Binding LastName}"></GridViewColumn>
</GridView>
</ListView.View>
</ListView>
private ObservableCollection<Contact> items;
public ObservableCollection<Contact> Items
{
get { return items; }
set
{
if (value != items)
{
items = value;
NotifyOfPropertyChange(() => Items);
}
}
}
此外我建议使用Caliburn.Micro MVVM框架。它易于使用和舒适。以下是a basic example,适用于Caliburn.Micro