Winforms中WPF主机中的DataBinding错误?

时间:2010-05-23 16:37:16

标签: c# .net wpf data-binding

我花了太多时间用这个,找不到错误。也许我错过了一些非常明显的东西,或者我刚刚在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中做到这一点

问候丹尼尔

1 个答案:

答案 0 :(得分:1)

输出窗口中是否有任何绑定错误?

顺便说一句,您应该考虑让收集视图包装您的产品,然后过滤视图,而不是替换整个集合。

代码如下:

var collectionView = CollectionViewSource.GetDefaultView(Products);
collectionView.Filter += item => ...;