代码中的某些内容必定会导致此问题。以下是一个与预期相符的示例。
XAML:
<Window x:Class="TestDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<RoutedUICommand x:Key="EditItemsCommand" Text="Edit Items" />
</Window.Resources>
<Window.CommandBindings>
<CommandBinding
Command="{StaticResource EditItemsCommand}"
CanExecute="EditItems_CanExecute"
Executed="EditItems_Executed" />
</Window.CommandBindings>
<StackPanel>
<Button Name="_editButton" Content="Edit" Command="{StaticResource EditItemsCommand}" />
<Button Content="Unselect all" Click="OnUnselectAll" />
<ListView
Name="_listView"
ItemsSource="{Binding Path=Items}"
SelectionMode="Extended"
MouseDoubleClick="OnListViewMouseDoubleClick">
</ListView>
</StackPanel>
</Window>
后面的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Input;
namespace TestDemo
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
public IEnumerable<string> Items
{
get
{
for (int i = 0; i < 10; i++) { yield return i.ToString(); }
}
}
private void EditItems_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = _listView != null && _listView.SelectedItems.Count > 0;
}
private void EditItems_Executed(object sender, ExecutedRoutedEventArgs e)
{
EditWindow editWindow = new EditWindow();
editWindow.EditItems = _listView.SelectedItems.Cast<string>();
editWindow.ShowDialog();
}
private void OnListViewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
_editButton.Command.Execute(null);
}
private void OnUnselectAll(object sender, RoutedEventArgs e)
{
_listView.SelectedItem = null;
}
}
}
XAML:
<Window x:Class="TestDemo.EditWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="EditWindow">
<ListBox ItemsSource="{Binding Path=EditItems}" />
</Window>
后面的代码:
using System;
using System.Collections.Generic;
using System.Windows;
namespace TestDemo
{
public partial class EditWindow : Window
{
public EditWindow()
{
InitializeComponent();
DataContext = this;
}
public IEnumerable<string> EditItems { get; set; }
}
}
你如何编辑项目?替换它们还是只更改属性?代码中有些事情会导致您正在遇到的行为。 – 2010-07-27 13:02:18
我用新项目替换它们。我已经想通了,不知何故使列表的SelectedItems属性无效,即背景在选定的项目上保持蓝色,但由于新项目在技术上没有选择(不在列表中),所以它们不被视为这样。我通过在SelectedItems集合中添加新对象来解决问题。 – 2010-07-27 13:12:35