Как удалить пользовательский элемент из списка ListBox и ObservableCollection при нажатии на кнопку - PullRequest
3 голосов
/ 07 августа 2010

У меня есть listBox и ObservableCollection. Для listBox.ItemSource (listNotify.ItemSource) задано значение ObservableCollection (errosList). Проблема, которая у меня есть, заключается в том, что я не знаю, как удалить правильный элемент из списка ошибок, когда пользователь нажимает кнопку с содержимым х из списка. Для элемента listBox я использую ItemTemplate, внутри stackPanel и в stackPanel у меня есть кнопка. Ниже приведен код XAML:

<ListBox x:Name="listNotify">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" Height="35">
                        <Image Height="16" Source="/Template;component/Resources/error.png" Stretch="Fill" VerticalAlignment="Top" Width="16"/>
                        <StackPanel Orientation="Vertical">
                            <HyperlinkButton Content="{Binding ErrorHeader}" HorizontalAlignment="Left" Height="16" Width="125"/>
                            <TextBlock Text="{Binding ErrorMessage}" HorizontalAlignment="Left" Width="405" d:LayoutOverrides="VerticalAlignment" />
                        </StackPanel>
                        <Button Content="x" Width="20" Height="20" Click="removeError_Click"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

Код взят из проекта silverlight 4. Спасибо.

Ответы [ 2 ]

1 голос
/ 07 августа 2010
private void removeError_Click(object sender, RoutedEventArgs e) {
    FrameworkElement fe = sender as FrameworkElement;
    if (null != fe) {
        _observableCollection.Remove((YourType)fe.DataContext);

    }
}

Должен делать то, что вы ищете.Замените YourType на тип, который вы объявили в ObservableCollectiion.

0 голосов
/ 07 августа 2010

Разве у вас нет ID-подобного свойства в ваших Элементах коллекции списков ошибок?Тогда вы можете использовать Tag-свойство кнопки для архивирования:

<Button Content="x" Width="20" Height="20" Tag="{Binding ID}" Click="Button_Click" />

и в событии нажатия кнопки:

string id = ((Button) sender).Tag.ToString();
var itemToRemove = errorsList.Where(x => x.ID == id).First();
errorsList.Remove(itemToRemove);

Надеюсь, что поможет

...