Поэтому у меня есть следующие настройки: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. Я хочу, чтобы иметь возможность добавить новый элемент в список, если выполняются следующие условия:
- о планировании предметов Коллекция пуста.
- Последний элемент в коллекции элементов планирования имеет значение DhpRepresentativeSelected, которое не равно null.
- Последний элемент в коллекции элементов планирования содержит текст в строке «Действия».
Первый элемент достаточно прост, потому что я вызываю AddNewActivityCommand.RaiseCanExecuteChanged();
после того, как добавлю новый элемент из пустого списка.
Теперь мне нужно вызвать AddNewActivityCommand.RaiseCanExecuteChanged();
из ModelModel PlanningItem, но у него нет прав доступа к этой команде.
Вы можете справиться с этим из 2-х направлений: 1. wrap AddNewActivityCommand.RaiseCanExecuteChanged(); в методе и вызвать его из объекта PlanningItem. 2. Планирование будет регистрироваться во всем уведомлении PlanningItem PropertyChanged и будет проверять условие, когда это конкретное свойствоChanged. – Clueless