我遇到了绑定Collection do ListView的问题。
public static ObservableCollection<ParagonViewClass> mparagonViewList = new ObservableCollection<ParagonViewClass>();
public ObservableCollection<ParagonViewClass> paragonViewList
{
get
{
return mparagonViewList;
}
}
在方法中,当用户添加新项目时,我将其添加到列表中:
paragonViewList.Insert(0, newPar);
还尝试了mparagonViewList.Insert(0,newPar);
xaml文件中的Itemssource:
<ListView Grid.Row="1" Name="paragonListView1" ItemsSource="{Binding paragonViewList}" .../>
@EDIT:Listview有DataTemplate(带有标签的网格 - 我确定绑定没问题,因为只需设置myListVIew.ItemsSource = myLis就可以了;)
看起来当我点击产品添加到listview时它会插入数据库,但我无法在listview上看到该产品。可能有一点点愚蠢的问题,但我真的找不到它;)
感谢您的回答!
答案 0 :(得分:1)
查看您提供的代码,如果有的话,很难弄清楚您做错了什么。所以,我把一个有用的示例应用程序放在一起(无论如何从WPF的角度来看)。
我的模型名为ItemModel,而不是ParagonViewClass,定义如下
public class ItemModel
{
public ItemModel() { }
public string Text { get; set; }
}
我的Xaml
<Window x:Class="StackOverflow._20799346.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:common="clr-namespace:StackOverflow.Common;assembly=StackOverflow.Common"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Title="MainWindow" Height="350" Width="525">
<DockPanel>
<StackPanel Orientation="Horizontal" DockPanel.Dock="Top">
<Button Content="Add Item" Click="AddItem_OnClick" />
</StackPanel>
<ListView ItemsSource="{Binding Path=Items}">
<ListView.ItemTemplate>
<DataTemplate DataType="{x:Type common:ItemModel}">
<TextBlock Text="{Binding Path=Text}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</DockPanel>
</Window>
请注意DataContext绑定到RelativeSource Self,允许将后面的代码用作ViewModel。我通常更喜欢创建一个单独的ViewModel类,但这种方法有其优点,因为可以直接从控件到ViewModel,而不是使用命令。
背后的代码,现在是视图模型,看起来像
public partial class MainWindow : Window
{
private ObservableCollection<ItemModel> items;
public MainWindow()
{
InitializeComponent();
}
public ObservableCollection<ItemModel> Items { get { return items ?? (items = new ObservableCollection<ItemModel>()); } }
private void AddItem_OnClick(object sender, RoutedEventArgs e)
{
Items.Add(new ItemModel() { Text = Items.Count.ToString(CultureInfo.CurrentCulture) });
}
}
我在Items属性上使用了延迟加载技术。它只会在访问时实例化。为简单起见,单击Add Item按钮时,我将添加一个新项目,其文本设置为Items集合的计数。
您应该能够将此代码转换为新的WPF应用程序项目,修复xaml文件中的命名空间并运行它。
现在,正如Rohit Vats在上面暗示的那样,Items属性不需要Setter。当通过它实现的INotifyPropertyChanged和INotifyCollectionChanged接口添加或删除项时,ObservableCollection本身会通知WPF绑定子系统。
我知道这并没有直接回答你的问题,但是如果没有关于原始问题的进一步信息(即代码),就不可能知道出了什么问题。
希望这个例子有所帮助。
注意:为简洁起见,我删除了异常管理。