Вместо того, чтобы сделать prodCompany
в вашем Movie
классе строкой, вы должны сделать его типа Production
.
Кажется, вы хотите инициализировать производственную компанию с вопросительными знаками. И тогда вы можете перезаписать название, город и штат производственной компании. Итак, ваш Movie
класс должен выглядеть так:
public class Movie {
private Production prodCompany;
public Movie() {
prodCompany = new Production();
}
public void setProdCompany(String someName, String someCity, String someState) {
prodCompany.setCompanyName(someName);
prodCompany.setLocationCity(someCity);
prodCompany.setLocationState(someState);
}
...
Вместо того, чтобы выбрать для Выбрал/Отменил выбор, лучший маршрут мог бы быть должен сцепиться в PreviewMouseDown. preblem с обработкой события Selected и Unselected - то, что событие уже имело место при получении уведомления. Нет ничего для отмены, потому что это уже произошло.
С другой стороны, события Preview отменяемы. Это не точное событие, которое Вы хотите, но это действительно дает Вам oppuritunity, чтобы препятствовать тому, чтобы пользователь выбрал другой узел.
Вы не можете отменить событие как Вы, может, например, событие Closing. Но можно отменить его при кэшировании последнего выбранного значения. Секрет - Вы, должны изменить выбор, не повторно запуская событие SelectionChanged. Вот пример:
private object _LastSelection = null;
private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (IsUpdated)
{
MessageBoxResult result = MessageBox.Show("The current record has been modified. Are you sure you want to navigate away? Click Cancel to continue editing. If you click OK all changes will be lost.", "Warning", MessageBoxButton.OKCancel, MessageBoxImage.Hand);
switch (result)
{
case MessageBoxResult.Cancel:
e.Handled = true;
// disable event so this doesn't go into an infinite loop when the selection is changed to the cached value
PersonListView.SelectionChanged -= new SelectionChangedEventHandler(OnSelectionChanged);
PersonListView.SelectedItem = _LastSelection;
PersonListView.SelectionChanged += new SelectionChangedEventHandler(OnSelectionChanged);
return;
case MessageBoxResult.OK:
// revert the object to the original state
LocalDataContext.Persons.GetOriginalEntityState(_LastSelection).CopyTo(_LastSelection);
IsUpdated = false;
Refresh();
break;
default:
throw new ApplicationException("Invalid response.");
}
}
// cache the selected item for undo
_LastSelection = PersonListView.SelectedItem;
}
Начиная с SelectedItemChanged
событие инициировано после SelectedItem
уже изменился, Вы не можете действительно отменить событие в этой точке.
То, что можно сделать, прислушиваются к щелчкам мышью и отменяют их перед SelectedItem
изменяется.
CAMS_ARIES:
XAML:
код:
private bool ManejarSeleccionNodoArbol(Object origen)
{
return true; // with true, the selected nodo don't change
return false // with false, the selected nodo change
}
private void Arbol_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if (e.Source is TreeViewItem)
{
e.Handled = ManejarSeleccionNodoArbol(e.Source);
}
}
private void Arbol_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Source is TreeViewItem)
{
e.Handled=ManejarSeleccionNodoArbol(e.Source);
}
}