将类绑定到ListView数据模板

时间:2013-11-14 11:51:46

标签: c# wpf xaml listview

我正在尝试将ListView与模型列表绑定。 xaml是 -

<ListView Name="lvProductBinding" HorizontalAlignment="Left" Height="434" Margin="10,144,0,0" VerticalAlignment="Top" Width="909">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Expander Header="{Binding ProductNo}" HorizontalAlignment="Left" Margin="967,153,-912,0" VerticalAlignment="Top" Width="895" Height="224" IsExpanded="False">
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" Height="195" VerticalAlignment="Top" Width="895" Margin="0,0,-2,0">
                        <Label  Content="{Binding ProductDescription}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="181" Height="27" />
                        <Label  Content="{Binding VendorName}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="181" Height="27" />
                </StackPanel>
            </Expander>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

在mu xaml.cs中,我在构造函数中执行此操作 -

List<ProductDetailsModel> products;
        products = new List<ProductDetailsModel>();

        ProductDetailsModel objProductDetailsModel = new ProductDetailsModel();
        objProductDetailsModel.VendorProductInventory = new VendorProductInventory() { ProductNo = "XS-3487", ProductDescription = "Perfume", VendorName = "JohnDoe" };
        products.Add(objProductDetailsModel);

        objProductDetailsModel = new ProductDetailsModel();
        objProductDetailsModel.VendorProductInventory = new VendorProductInventory() { ProductNo = "TT-23487", ProductDescription = "Shoes", VendorName = "Richard Gere" };
        products.Add(objProductDetailsModel);

        objProductDetailsModel = new ProductDetailsModel();
        objProductDetailsModel.VendorProductInventory = new VendorProductInventory() { ProductNo = "VFG-33487", ProductDescription = "Socks", VendorName = "Tom Cruise" };
        products.Add(objProductDetailsModel);

        lvProductBinding.ItemsSource = products;

其中ProductDetailsModel类定义为 -

public class ProductDetailsModel : INotifyPropertyChanged
{
    public ProductDetailsModel()
    {

    }

    private VendorProductInventory _vendorProductInventory;
    public VendorProductInventory VendorProductInventory
    {
        get
        {
            return _vendorProductInventory;
        }
        set
        {
            if (_vendorProductInventory != value)
            {
                _vendorProductInventory = value;
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    public virtual void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, e);
        }
    }


}

有人可以告诉我这里做错了什么。

急切地等待回复。 谢谢, 萨基特

1 个答案:

答案 0 :(得分:0)

您发布的代码存在一些问题。

首先,正如Sheridan所说,你的INotifyPropertyChanged的实现是错误的,ListView中的数据的自动更新在正确之前将无效。

其次,XAML文件中列出的所有绑定在ProductDetailsModel类中都没有匹配的公共属性。很可能正在填充ListView并且所有绑定都失败(您应该在运行时在VS输出窗口中看到此异常)。您所写的绑定应如下所示:

{Binding Path=VendorProductInventory.ProductNo}