Я просто стремлюсь отменить логическое значение моей ObservableCollection под названием ActiviteCollection.

Это логическое значение автоматически определяется как False (0), но когда я нажимаю кнопку, некоторые логические значения становятся истинными. Это обратное мне не удается сделать, и я ничего подобного в сети не нашел.

Заранее спасибо за помощь.

Я могу отредактировать свое сообщение, если вам нужен какой-то код, но общий способ изменения логического значения ObservableCollection должен быть достаточным, чтобы помочь мне найти то, к чему я стремлюсь.

Это сценарий для кнопки, которая меняет логическое значение на противоположное:

private void click_PrisEnCompte(object sender, RoutedEventArgs e)
{
    var viewModel = (ViewModel)(sender as System.Windows.Controls.ListBoxItem).DataContext;

    foreach (var data in DonneesBrutes.SelectedItems)
    {
        if(viewModel.ActiviteCollection.Any(c => c.PMRQTOTMActivite == DonneesBrutes.CurrentItem.ToString()))
        {
            var reversedCollection = viewModel.ActiviteCollection.Select(t => !t);
        }
    }
}

Этот сценарий в настоящее время не работает, произошла ошибка при выборе: The type Arguments for method ... cannot be inferred for the usage. и на! T Cannot apply Operator ! to operand of type.....

-1
Kraenys 17 Сен 2014 в 15:56
Если вы хотите «обратить» логическое значение, просто отмените его. var a = true; a=!a;
 – 
Ben Robinson
17 Сен 2014 в 16:01
Select(t => !t) компилируется для меня... Что такое ActiveCollection? Кроме того, похоже, что вы используете MVVM ... почему у вас есть то, что, как я предполагаю, является событием щелчка в коде? посмотри Команды.
 – 
Alex Anderson
17 Сен 2014 в 16:21
Я действительно использую шаблон MVVM. ActiveCollection — это моя ObservableCollection public ObservableCollection<Activite> ActiviteCollection { get; set; } ActiviteCollection = new ObservableCollection<Activite>(_BDDInterneEntities.Activite);
 – 
Kraenys
17 Сен 2014 в 16:24
Мне кажется, что ActiviteCollection не является ObservableCollection...
 – 
Weyland Yutani
17 Сен 2014 в 16:24
Я тоже не думаю. Это ObservableCollection из public partial class Activite { public string PMRQTOTMActivite { get; set; } public Nullable<bool> Flag { get; set; } }
 – 
Kraenys
17 Сен 2014 в 16:25

4 ответа

Лучший ответ
foreach (var data in DonneesBrutes.SelectedItems)
{
    foreach (var item in viewModel.ActiviteCollection.Where(c => c.PMRQTOTMActivite == DonneesBrutes.CurrentItem.ToString()))
    {
        item.MyBoolean = !item.MyBoolean;
    }
}
2
Weyland Yutani 17 Сен 2014 в 16:33
Хорошо звучит правильно. Это было то, что я искал. Это стоило мне дорого, потому что кажется, что я был недостаточно точен или ясен, но спасибо за вашу помощь.
 – 
Kraenys
17 Сен 2014 в 16:36
bool b = false;
b = !b; //Inverted!!

В наблюдаемой коллекции

ObservableCollection<Bool> BooleanList;
foreach(bool b in BooleanList)
    b = !b;
0
Alex Anderson 17 Сен 2014 в 16:01
1
Может попробовать скомпилировать это
 – 
Weyland Yutani
17 Сен 2014 в 16:06
Ой, забыл, что вы не можете редактировать во время перечисления. Но он был задуман как скорее псевдокод, чем реальный код.
 – 
Alex Anderson
17 Сен 2014 в 16:10
* итерация, а не перечисление... боже, мне нужен обед.
 – 
Alex Anderson
17 Сен 2014 в 16:16

Следующее будет "перевернуть" каждый элемент в вашей коллекции:

var reversedCollection = from t in ActiviteCollection select !t;

0
joym8 17 Сен 2014 в 16:01
Если я делаю это: var reversedCollection = viewModel.ActiviteCollection.Select(t => !t);, что является способом LinQ, у меня возникает ошибка в Select. Я отредактирую свой вопрос с помощью своего buttonClickEvent
 – 
Kraenys
17 Сен 2014 в 16:14
Точно не знаю причину, но обходной путь заключается в явном указании типа следующим образом: var reversedCollection = from bool t in ActiviteCollection select !t;
 – 
joym8
17 Сен 2014 в 17:31

Если вы хотите "перевернуть" логическое значение по заданному индексу, можете сделать это:

ActiviteCollection[index] = !ActiviteCollection[index];
0
Weyland Yutani 17 Сен 2014 в 16:11
Что вы имеете в виду под Индексом? Логическое значение, которое я хочу изменить? Если это так, у меня возникает ошибка при адаптации вашего кода: viewModel.ActiviteCollection[Flag] = !viewModel.ActiviteCollection[Flag];, не удается разрешить флаг символа. Флаг - это логическое значение, которое я хочу изменить
 – 
Kraenys
17 Сен 2014 в 16:18
Вам нужно знать, из какого индекса в коллекции было взято логическое значение. Т.е. вам нужно знать, например, что это второе логическое значение в коллекции, и в этом случае вы используете ActiviteCollection[1] = !ActiviteCollection[1];
 – 
Weyland Yutani
17 Сен 2014 в 16:19
Неважно. Я предположил, что ActiviteCollection — это ObservableCollection.
 – 
Weyland Yutani
17 Сен 2014 в 16:25