Я сейчас пишу приложение и столкнулся с проблемой с ListView, который отображает элементы из модели просмотра; в указанной модели представления «Selected» есть свойство, которое является просто логическим значением, и я привязываю его к свойству «IsSelected» ListView.
У меня есть кнопка «Очистить выделение», которая перебирает каждый выбранный элемент и устанавливает для него значение false; это работает, и команда обновляется, а кнопки больше не работают, потому что там ничего нет Selected == true.
В картинках
Товар выбран; кнопки доступны.

Нажата кнопка «Очистить выделение». 
На этом этапе я больше не могу щелкнуть элемент управления, чтобы выбрать элемент; Я должен управлять щелчком мыши, чтобы отменить выбор, в результате чего все возвращается как отключенное и ничего не выбрано.
Вот XAML для элемента управления - не уверен, что я делаю неправильно, но пока не могу найти ответ.
<ListView ItemsSource="{Binding AssignableItems, UpdateSourceTrigger=PropertyChanged}" Grid.Row="2" SelectionMode="Extended">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem" BasedOn="{StaticResource lviStyleBase}">
<Setter Property="IsSelected" Value="{Binding Selected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Header="Created" DisplayMemberBinding="{Binding ContactCreated}" Width="Auto" />
<GridViewColumn Header="Contact Name" DisplayMemberBinding="{Binding ContactName}" Width="Auto" />
<GridViewColumn Header="Company" DisplayMemberBinding="{Binding Company}" Width="Auto" />
</GridView>
</ListView.View>
</ListView>
Вот ViewModel:
namespace CSI.ViewModels
{
public class AssignViewModel
: ModelBase
{
#region Properties
private bool viewingFilters;
public bool Filtering
{
get { return viewingFilters; }
set { if ( SetValue(ref viewingFilters, value) ) Notify(); }
}
private bool assigning;
public bool Assigning
{
get { return assigning; }
set { if ( SetValue(ref assigning, value) ) Notify(); }
}
private string viewTitle = "Assign";
public string ViewTitle
{
get => $"{viewTitle}{(Filtered ? " (filtered)" : "")}";
}
private AssignFilterValuesModel filters;
public AssignFilterValuesModel Filters
{
get { return filters; }
set { SetValue(ref filters, value); }
}
public bool Filtered
{
get
{
if ( filters == null ) return false;
return assignables.Count() != AssignableItems.Count();
}
}
private bool loading;
public bool Loading
{
get { return loading; }
set { SetValue(ref loading, value); }
}
private ObservableCollection<AssignableWorkItemModel> assignables;
public ObservableCollection<AssignableWorkItemModel> AssignableItems
{
get
{
if ( assignables == null ) return null;
if ( Filters == null ) return assignables;
var retval = assignables.Where(x => 1 == 1);
if ( Filters.Dealers.Any(x => x.Selected) )
retval = retval.Where(x => filters.Dealers.Where(o => o.Selected).Select(o => o.Key).ToList().Contains(x.Dealer));
if ( Filters.VehicleModels.Any(x => x.Selected) )
retval = retval.Where(x => filters.VehicleModels.Where(o => o.Selected).Select(o => o.Key).ToList().Contains(x.VehicleModel));
return new ObservableCollection<AssignableWorkItemModel>(retval);
}
set => SetValue(ref assignables, value);
}
private ObservableCollection<AssignableWorkItemModel> selected;
public ObservableCollection<AssignableWorkItemModel> SelectedItems
{
get => selected;
set => SetValue(ref selected, value);
}
#endregion
#region Commands
private RelayCommand displayFilterScreen;
public void Execute_DisplayFilters(object _)
{
Filtering = true;
}
public bool CanExecute_DisplayFilters(object _) => !Filtering;
public RelayCommand DisplayFilters
{
get => displayFilterScreen ?? (displayFilterScreen = new RelayCommand(Execute_DisplayFilters, CanExecute_DisplayFilters));
}
private RelayCommand applyFilters;
public void Execute_ApplyFilters(object _)
{
Filtering = !Filtering;
Notify(nameof(AssignableItems));
Notify(nameof(Filtered));
Notify(nameof(ViewTitle));
}
public bool CanExecute_ApplyFilters(object _) => Filtering;
public RelayCommand ApplyFilters
{
get => applyFilters ?? (applyFilters = new RelayCommand(Execute_ApplyFilters, CanExecute_ApplyFilters));
}
private RelayCommand doAssign;
public void Execute_Assign(object _)
{
UserSelectWindow us = new UserSelectWindow();
us.Owner = Application.Current.MainWindow;
ViewModelServer.UserSelectVM.Prompt = "Select the user you wish to assign these items to";
}
public bool CanExecute_Assign(object _) => !Filtering && (bool)AssignableItems?.Any(x => x.Selected);
public RelayCommand Assign
{
get => doAssign ?? (doAssign = new RelayCommand(Execute_Assign, CanExecute_Assign));
}
private RelayCommand clrSelection;
public void Execute_ClearSelection(object _)
{
AssignableItems?.Where(x => x.Selected).ToList().ForEach(x => x.Selected = false);
}
public bool CanExecute_ClearSelection(object _) => (bool)AssignableItems?.Any(x => x.Selected);
public RelayCommand ClearSelection
{
get => clrSelection ?? (clrSelection = new RelayCommand(Execute_ClearSelection, CanExecute_ClearSelection));
}
#endregion
#region Constructors
#endregion
}
}
Решением было добавить привязку для SelectedIndex и установить значение -1 при вызове ClearSelection; чаевые отсюда
Яна Дуггар открыто говорила о своих поисках любви. Вот все, что она сказала на эту тему и о своем пятилетнем окне для замужества.
Звезда «Чужестранки» Сэм Хьюэн недавно рассказал, что он возьмет со съемочной площадки, чтобы вспомнить Джейми Фрейзера, роль, которая сделала его звездой.
«She Loves You» была написана за час, записана за день и стала песней The Beatles с одним из лучших исполнений в их карьере.
У Долли Партон и ее бабушки Бесси были особые отношения. Бабушка Партон была очень больна, но это не мешало Долли разыгрывать ее.
Вы можете подумать, что дуб или гикори — прочные породы дерева, но когда речь идет о самой твердой древесине в мире, они даже близко не стоят.
Океан полон красоты, но он также скрывает одних из самых страшных морских существ на планете. Многие из этих животных скрываются глубоко под поверхностью океана, в тёмном, полном давления мире морских глубин.
Если вы сражаетесь с враждебными мобами или готовитесь к PvP-боям, знание лучших чар для мечей в Minecraft может дать вам серьёзное преимущество. Зачарование мечей позволяет наносить больше урона, увеличивать количество выпадающих мобов и продлевать срок службы меча.
Когда говорят о социалистических странах, часто представляют себе полный государственный контроль и отсутствие частной собственности. Но на практике социалистические экономики сильно различаются.
В «Детях» появится громкая камео и несколько разрушительных новостей
Утверждается, что этот RAV4 находится в отличном состоянии и готов к игре в музыкальные стулья.
На кадрах, снятых с дрона, видно, как пожарные изо всех сил пытаются потушить пламя.
«Глаза Ваканды» напрямую связаны с MCU, а также обновления о «Людях Икс '97», «Что, если...», «Сорвиголова» и многом другом.
Ава Гарднер была замужем за Микки Руни и Фрэнком Синтрой, и встречалась с несколькими другими голливудскими звездами. Вот взгляд назад на историю знакомств Авы Гарднер.
Джон Клиз женился на Дженнифер Уэйд в 2012 году. Вот все, что нужно знать о жене Джона Клиза, Дженнифер Уэйд.
Олимпийская чемпионка Эллисон Феликс вышла замуж за своего мужа Кеннета Фергюсона в 2018 году. Вот все, что нужно знать о муже Эллисон Феликс, Кеннете Фергюсоне.
Мена Сувари замужем за своим мужем Майклом Хоупом с 2018 года. Вот все, что нужно знать о муже Мены Сувари.
Это поражает меня Внезапно, как это часто бывает, Это снова и снова на полпути <Нет, не то, что в Тихом океане, ты темно-бордовый, то, что на карнавале> Каждый громкий заголовок…..
В 2022 году, с выпуском GPT-3, навыки письма, кажется, стали менее важными. С помощью ИИ люди с плохим письмом также могут генерировать качественный персонал.
В современном быстро меняющемся и конкурентном мире карьера играет важную роль в личностном росте, финансовой стабильности и общей удовлетворенности жизнью. Однако многие люди оказываются в безжалостном цикле застоя и неудовлетворенности, постепенно угасая в своей профессиональной жизни.
На прошлой неделе я заметил пресс-релиз, разосланный через PressGazette (новостной веб-сайт британских СМИ). В статье сообщалось, что Acast, скандинавская компания по размещению и рекламе подкастов, возглавит консорциум «вероятно, самых влиятельных» издателей подкастинга.