【问题标题】:Bug with DataBinding in WPF Host in Winforms?Winforms中WPF主机中的数据绑定错误?
【发布时间】:2011-02-22 23:13:38
【问题描述】:

我在这方面花了太多时间,却找不到错误。也许我遗漏了一些非常明显的东西,或者我刚刚在 Winforms 的 WPF Element Host 中发现了一个错误。

我将 ListView 绑定到位于我的 ProductListViewModel 上的 ObeservableList。

我正在尝试使用一般的想法来实现对 ListView 的搜索,以仅使用过滤后的新列表更改 ObservableList。

反正ListView的Binding代码是这样的:

<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 事件(它为空),所以 UI 上什么也没有发生。 我已经尝试过Mode=TwoWay和其他Binding模式,似乎无法让ListView订阅ItemsSource...

谁能帮我解决这个问题?我即将忘记 ElemenHost 并在 Winforms 中进行操作

问候丹尼尔

【问题讨论】:

    标签: c# .net wpf data-binding


    【解决方案1】:

    输出窗口有绑定错误吗?

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

    代码类似于:

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

    【讨论】:

    • 你好朱利安。感谢您的提示,但我在输出窗口中找不到任何 DataBinding 错误。这就是这里令人震惊的地方。由于列表确实加载了,它只是不订阅更新。我会研究过滤。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-12-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多