我花了太多时间用这个,找不到错误。也许我错过了一些非常明显的东西,或者我刚刚在WinF的WPF元素主机中发现了一个错误。
我将ListView绑定到生活在我的ProductListViewModel上的ObeservableList。
我正在尝试使用一般的想法搜索ListView,只是用一个被过滤的新列表来改变ObservableList。
无论如何,ListView绑定代码如下所示:
<ListView ItemsSource="{Binding Path=Products}" SelectedItem="{Binding Path=SelectedItem}" SelectionMode="Single">
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"></Setter>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"></TextBlock>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
ViewModel代码就像它可以获得的一样:
private ObservableCollection<ProductViewModel> products;
public ObservableCollection<ProductViewModel> Products
{
get { return products; }
private set
{
if (products != value)
{
products = value;
OnPropertyChanged("Products");
}
}
}
现在问题出在这里:一旦我调试到我的OnPropertyChanged方法,我可以看到PropertyChanged事件没有订户(它是null),所以在UI上没有任何事情发生。 我已经尝试过Mode = TwoWay和其他Binding模式,看来我无法让ListView订阅ItemsSource ...
任何人都可以帮我吗?我只是想忘掉ElemenHost,只是在Winforms中做到这一点
问候丹尼尔
答案 0 :(得分:1)
输出窗口中是否有任何绑定错误?
顺便说一句,您应该考虑让收集视图包装您的产品,然后过滤视图,而不是替换整个集合。
代码如下:
var collectionView = CollectionViewSource.GetDefaultView(Products);
collectionView.Filter += item => ...;