Доступ к ListView во время выполнения для обновления элемента - PullRequest
0 голосов
/ 01 апреля 2012

Мне нужно обновить элемент ListView , нажав кнопку.Как найти и обновить один во время выполнения?

update : я имею в виду, что мне нужно найти определенный элемент ListView и обновить только текст этого элемента.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2012

Вы можете использовать команды. Например:

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public static readonly ICommand ItemClickCommand = new RoutedCommand("ItemClick", typeof(MainWindow));

        public MainWindow()
        {
            InitializeComponent();

            this.CommandBindings.Add(
                new CommandBinding(
                    MainWindow.ItemClickCommand,
                    this.ExecuteItemClickCommand,
                    this.CanExecuteItemClickCommand));
        }

        private void CanExecuteItemClickCommand(object sender, CanExecuteRoutedEventArgs e)
        {
            e.CanExecute = e.Parameter is ListBoxItem;
        }

        private void ExecuteItemClickCommand(object sender, ExecutedRoutedEventArgs e)
        {
            // Here you can access ListBoxItem that holds a clicked button.
            ListBoxItem listBoxItem = (ListBoxItem)e.Parameter;
            listBoxItem.Content = "...";
        }
    }
}

Теперь единственное, что вам нужно, это назначить ItemClickCommand для кнопки и привязать CommandParameter к соответствующему ListBoxItem.

Пример XAML:

<Window ...
        xmlns:local="clr-namespace:WpfApplication1">
    <ListBox>
        <ListBoxItem>
            <ListBoxItem.Content>
                <Button Command="{x:Static local:MainWindow.ItemClickCommand}"
                        CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem}}"
                        Content="Click Me"/>
            </ListBoxItem.Content>
    <...>
0 голосов
/ 01 апреля 2012

Когда ListViewItems были добавлены в ListView вручную, вы можете искать их по их содержимому и заменять новым содержимым, подобным этому (используя System.Linq):

object contentToReplace = ...;
object newContent = ...;
ListViewItem item = listView.Items.Cast<ListViewItem>().FirstOrDefault(
    lvi => lvi.Content == contentToReplace);
if (item != null)
{
    item.Content = newContent;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...