2015-09-18 7 views
0

Поэтому у меня есть следующие настройки:Execute RaiseCanExecuteChanged из 'подкласса'

ПЛАНИРОВАНИЕ:

public class Planning : ViewModelBase 
{ 
    public Planning() 
    { 
     AddNewActivityCommand = new RelayCommand(AddActivity, CanAddActivity); 
    } 

    public ObservableCollection<PlanningItem> PlanningItems { get; set; } 

    public PlanningItem SelectedPlan { get; set; } 

    #region AddNewActivity 
    public RelayCommand AddNewActivityCommand { get; private set; } 

    private bool CanAddActivity() 
    { 
     if (!PlanningItems.Any()) 
     { 
      return true; 
     } 
     if (string.IsNullOrEmpty(PlanningItems[PlanningItems.Count - 1].Activities) != true || 
      PlanningItems[PlanningItems.Count - 1].DhpRepresentativeSelected != null) 
      { 
       return true; 
      } 
     return false; 
    } 

    private void AddActivity() 
    { 
     PlanningItems.Add(new PlanningItem()); 
     AddNewActivityCommand.RaiseCanExecuteChanged(); 
    } 
    #endregion 
} 

ПЛАНИРОВАНИЕ ПУНКТ:

public class PlanningItem : ViewModelBase 
{ 
    private string _activity; 

    public ObservableCollection<OutreachUser> DhpRepresentativeSource 
    { 
     get 
     { 
      var userSource = new ObservableCollection<OutreachUser>(); 

      using (var context = new Outreach_Entities()) 
      { 
       var query = from a in context.UserInfoes 
          join b in context.PersonalInfoes on a.UserIdentity equals b.PersonIdentity 
          join c in context.PersonalTitles on b.TitleLink equals c.TitleIdentity into cGroup 
          from c in cGroup.DefaultIfEmpty() 
          select new OutreachUser 
          { 
           PersonLink = a.UserIdentity, 
           Username = a.Username, 
           FirstName = b.FirstName, 
           MiddleInitial = b.MiddleInitial, 
           LastName = b.LastName 
          }; 
       foreach (var result in query) 
       { 
        userSource.Add(result); 
       } 
       return userSource; 
      } 
     } 
    } 

    public OutreachUser DhpRepresentativeSelected { get; set; } 

    public DateTime PlanningDate { get; set; } 

    public TimeSpan PlanningStart { get; set; } 

    public TimeSpan PlanningEnd { get; set; } 

    public int PlanningTotalHours { get; set; } 

    public string Activities 
    { 
     get 
     { 
      return _activity; 
     } 
     set 
     { 
      _activity = value; 
      RaisePropertyChanged(nameof(Activities), "", _activity, true); 
     } 
    } 
} 

У меня есть ListBox, привязанных к Коллекция Observable CollectionItems. Я хочу, чтобы иметь возможность добавить новый элемент в список, если выполняются следующие условия:

  1. о планировании предметов Коллекция пуста.
  2. Последний элемент в коллекции элементов планирования имеет значение DhpRepresentativeSelected, которое не равно null.
  3. Последний элемент в коллекции элементов планирования содержит текст в строке «Действия».

Первый элемент достаточно прост, потому что я вызываю AddNewActivityCommand.RaiseCanExecuteChanged(); после того, как добавлю новый элемент из пустого списка.

Теперь мне нужно вызвать AddNewActivityCommand.RaiseCanExecuteChanged(); из ModelModel PlanningItem, но у него нет прав доступа к этой команде.

+1

Вы можете справиться с этим из 2-х направлений: 1. wrap AddNewActivityCommand.RaiseCanExecuteChanged(); в методе и вызвать его из объекта PlanningItem. 2. Планирование будет регистрироваться во всем уведомлении PlanningItem PropertyChanged и будет проверять условие, когда это конкретное свойствоChanged. – Clueless

ответ

0

Бесшумный указал мне на ответ.

То, что я сделал, было в моей планировщике ViewModel. Я создал внутренний метод, который вызвал метод AddNewActivityCommand.RaiseCanExecuteChanged(). Я думаю, что этот метод вызвал из ModelModel PlanningItems.