1

I have a listbox that, when an item is selected, invokes a method that executes a Stored Procedure.

The problem is that when the first item is selected, my PropertyChanged event doesn't fire unless the selection is changed from one item to another . 因此,第二个项目 SelectedItem PropertyChanged 被触发,但看起来选择第一个项目只是被视为进入列表框,而不是进入列表框并选择发生单击的项目。

此外,我不能只在同一个项目上单击两次来触发通知,我必须实际选择不同的属性才能发生事件。

什么是让我在进入列表框时第一次单击的项目成为 SelectedItem 的最佳方式,并在该项目上触发 PropertySelected/Property Changed 事件?我希望这很清楚。

以下是我的代码,在此先感谢!

在我的视图模型中:

 public ObjectClass SelectedObject
 {
      get { return _SelectedObject; }
      set
      {
          _SelectedObject = value;
          base.OnPropertyChanged("SelectedObject");
      }
 }

 void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
 {
      switch (e.PropertyName)
      {
          case "SelectedObject" : UpdateSelectedStuffList.StoredProcedureMethod(this);
      }
 }

在我看来:

  <ListBox ItemsSource="{Binding Path=ObjectCollection, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" 
            DisplayMemberPath="objectName"
            SelectedItem="{Binding Path=SelectedObject, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

我在想,与其使用 PropertyChangedEventArgs,不如使用“PropertySelectedEventArgs”之类的东西。或者,也许我需要实现 INotifyPropertyChanging?

4

1 回答 1

1

如果您希望即使您连续两次选择相同的项目也能触发它,我会查看 OnClick。否则,考虑将选定的索引设置为 -1,这样当用户选择第一项时,它的值就会发生变化。

于 2012-10-01T19:14:56.907 回答