Ошибка с привязкой данных в WPF Host в Winforms? - PullRequest
1 голос
/ 23 мая 2010

Я провел слишком много времени с этим и не могу найти ошибку. Возможно, я упускаю что-то очень очевидное или, возможно, я только что нашел ошибку в хосте элементов WPF для Winforms.

Я связываю ListView с ObeservableList, который находится в моем ProductListViewModel.

Я пытаюсь реализовать поиск 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 (оно нулевое), поэтому в пользовательском интерфейсе ничего не происходит .. Я уже пробовал Mode = TwoWay и другие режимы Binding, похоже, я не могу заставить ListView подписаться на ItemsSource ...

Может кто-нибудь помочь мне с этим? Я просто собираюсь забыть о ElemenHost и просто сделать это в Winforms

привет Даниил

1 Ответ

1 голос
/ 23 мая 2010

Есть ли какая-либо ошибка привязки в окне вывода?

Кстати, вам следует подумать о том, чтобы получить представление коллекции, обертывающее ваши продукты, и затем отфильтровать представление вместо замены всей коллекции.

Код будет выглядеть примерно так:

var collectionView = CollectionViewSource.GetDefaultView(Products);
collectionView.Filter += item => ...;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...