0

以前は動作していた Silverlight XAML がいくつかありますが、突然動作を停止するために何をしたのか、またはそれを変更する方法さえ理解できないようです。

XAML を次に示します。

<ListBox ItemsSource="{Binding ItemsForSelectedPublisher}"
         SelectedItem="{Binding SelectedItemForPublisher, Mode=TwoWay}"
         DisplayMemberPath="ItemNameWithSelectionCount"
         SelectionMode="Single"
         HorizontalAlignment="Left" 
         FontSize="14" 
         Width="300" 
         Height="500"
         />

ビューモデルからのいくつかのコード:

    public ObservableCollection<ItemViewModel> ItemsForSelectedPublisher
    {
        get { return _itemsForSelectedPublisher; }
        private set
        {
            if (_itemsForSelectedPublisher != value)
            {
                _itemsForSelectedPublisher = value;
                RaisePropertyChanged(() => ItemsForSelectedPublisher);
            }
        }
    }

    public ItemViewModel SelectedItemForPublisher
    {
        get { return _selectedItemForPublisher; }
        set
        {
            if (_selectedItemForPublisher != value)
            {
                _selectedItemForPublisher = value;
                RaisePropertyChanged(() => SelectedItemForPublisher);
            }
        }
    }

ListBox の SelectedItem が変更された (初めて設定された) 後、Silverlight Application.UnhandledException Handler で次の例外がキャッチされます。

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
   at System.ThrowHelper.ThrowArgumentOutOfRangeException()
   at System.Collections.Generic.List`1.get_Item(Int32 index)
   at System.Windows.Automation.Peers.SelectorAutomationPeer.RaiseSelectionEvents(SelectionChangedEventArgs e)
   at System.Windows.Controls.Primitives.Selector.InvokeSelectionChanged(List`1 unselectedItems, List`1 selectedItems)
   at System.Windows.Controls.Primitives.Selector.SelectionChanger.End()
   at System.Windows.Controls.Primitives.Selector.SelectionChanger.SelectJustThisItem(Int32 oldIndex, Int32 newIndex)
   at System.Windows.Controls.ListBox.MakeSingleSelection(Int32 index)
   at System.Windows.Controls.ListBox.HandleItemSelection(ListBoxItem item, Boolean isMouseSelection)
   at System.Windows.Controls.ListBox.OnListBoxItemClicked(ListBoxItem item)
   at System.Windows.Controls.ListBoxItem.OnMouseLeftButtonDown(MouseButtonEventArgs e)
   at System.Windows.Controls.Control.OnMouseLeftButtonDown(Control ctrl, EventArgs e)
   at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName, UInt32 flags)

私が知る限り、ListBox は間違ったインデックスを取得していますが、それが何であるか、またはなぜそれが起こっているのかわかりません。これがどのように起こっているのか誰にも分かりますか?この時点で、他にどこを見ればよいかわかりません。

4

1 に答える 1

0

多くの調査の後、根本的な原因は私自身のせいであることがわかりました(それほど驚くことではありません). どうやら私自身のコードのバグは、一部のビュー モデルの間違った Equals() オーバーライドにあったようです。これにより、ListBox バインディングが混乱し、範囲外の例外がスローされました。

于 2013-05-14T00:51:35.030 に答える