ItemSsource包含多个列的WPF网格中的绑定

时间:2015-03-27 11:25:32

标签: c# wpf mvvm

我正在按照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");
        }
    }

2 个答案:

答案 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