Combobox SelectedValue "Невозможно сохранить значение из цели обратно в источник" - PullRequest
2 голосов
/ 13 июля 2011

У меня есть следующий комбинированный список:

<Controls:RadComboBox 
  ItemsSource="{Binding UsuariosApp,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
  SelectedValue="{Binding SelectedUsuario}"
  IsEnabled="{Binding ChangeUserEnabled}"/>

ViewModel:

public List<UsuarioDetalle> UsuariosApp
{
    get
    {
        if (_users == null)
        {
            _users = new List<UsuarioDetalle>();
            if (AuthenticationController.ChildUserEntities != null)
                _users.AddRange(AuthenticationController.ChildUserEntities);
        }
        return _users;
    }
    set
    {
        _users = value;
        OnPropertyChanged(() => UsuariosApp);
    }
}

public object SelectedUsuario
{
    get
    {
        if (UsuariosApp != null && UsuariosApp.Count > 0)
        {
            AuthenticationController.CurrentUser = UsuariosApp[0].idUsuario;
            AuthenticationController.CurrentUserRole =
                (RolesUsuario)UsuariosApp[0].idStTipoUsuario;

            _lastUser = UsuariosApp[0];

            return UsuariosApp[0];
        }
        return null;
    }
    set
    {
        if (!((UsuarioDetalle)_lastUser).idUsuario.ToString().Equals(((UsuarioDetalle)value).idUsuario.ToString()))
        {
            bool? confirmation = SwitchUserConfirmation();
            if (confirmation.HasValue && confirmation.Value.Equals(false))
            {
                // Alex: cancelar el cambio de valor del combo
                ChangeUser = _lastUser;
            }
            else
            {
                ResetWorkspace(value);
            }
        }
        else
        {
            ResetWorkspace(value);
        }
    }
}

Это работает, но в выводе у меня появляется следующая ошибка при изменении значения в выпадающем списке

System.Windows.Data Ошибка: 8: Невозможно сохранить значение из цели обратно в источник. BindingExpression: Path = SelectedUsuario; DataItem = 'MainWindowViewModel' (HashCode = 26603182); целевой элемент - RadComboBox (Name = 'comboChildUsers'); Свойство target - «SelectedValue» (тип «Object»). TargetInvocationException: «System.Reflection.TargetInvocationException. ---> System.NullReferenceException: Ссылка на объект, не подлежащий изменению.

В чем может быть причина?

Ответы [ 2 ]

3 голосов
/ 13 июля 2011

прежде всего измените привязку для ItemsSource на OneWay. TwoWay не имеет смысла.

<Controls:RadComboBox 
     ItemsSource="{Binding UsuariosApp,Mode=OneWay}"
     SelectedItem="{Binding SelectedUsuario}"
     IsEnabled="{Binding ChangeUserEnabled}" />

ваш ресурс источника UsuariosApp является типом списка UsuarioDetalle, поэтому ваше свойство SelectedUsuario должно иметь тип UsuarioDetalle. Изменить SelectedValue на SelectedItem

public UsuarioDetalle SelectedUsuario { ... }

вам также нужно будет добавить OnPropertyChanged к вашему установщику SelectUsuario

OnPropertyChanged(() => SelectedUsuario);
2 голосов
/ 18 июля 2011

Это было нулевое исключение внутри ResetWorkspace (значение), трассировка не помогла

Спасибо всем!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...