Способ отключить визуальные элементы одинакового уровня, используя MVVM в .NET MAUI 9?C#

Место общения программистов C#
Ответить
Anonymous
 Способ отключить визуальные элементы одинакового уровня, используя MVVM в .NET MAUI 9?

Сообщение Anonymous »

Я использую библиотеку Syncfusion в моем проекте MAUI для мобильного приложения, в частности, sfexpander [1] и sfaccordion [2] .
У меня есть модель с именем CategoryTemplate , которая содержит vaseleCollection DropDownItems < /код>, который представляет подкатегории. Иерархия, на мой взгляд, (для простоты я ограничу количество SFExpanders 1) заключается в следующем: < /p> То, что я пытаюсь добиться, - это установление всех других основных разделов категории (т.е.: sfexpander ) Isvisible свойство в false , когда < Strong> First sfaccordion расширяющийся событие запускается. Затем сделайте обратное, когда его развертывание событие будет запущено. ), поэтому я хочу совета о том, какой лучший способ достичь этого был бы при соблюдении принципов MVVM.

Код: Выделить всё


< /code>
private void OnAccordionCollapsing(object sender_p, Syncfusion.Maui.Accordion.ExpandingAndCollapsingEventArgs e)
{
if(sender_p is SfAccordion _accordion && _accordion is not null)
{
SfExpander? _parentExpander = null;
SfExpander[]? expandersToCheck = [charsExpander, locsExpander, itemsExpander];
foreach (SfExpander expander in expandersToCheck)
{
if (expander.GetVisualTreeDescendants().Any(x => x == _accordion))
{
_parentExpander = expander;
break; // Found the parent, no need to continue searching
}
}
if (_parentExpander != null)
{
// Find the first SfAccordion within the parent expander
SfAccordion? firstAccordion = _parentExpander.GetVisualTreeDescendants()
.OfType()
.FirstOrDefault();
// If it is the first SfAccordion and it isn't null..
if (firstAccordion is not null && firstAccordion == _accordion)
{
// Make the other SfExpanders appear again because the first accordion's content has all been collapsed.

if (_parentExpander == charsExpander)
{
locsExpander.IsVisible = true;
itemsExpander.IsVisible = true;
}
else if (_parentExpander == locsExpander)
{
charsExpander.IsVisible = true;
itemsExpander.IsVisible = true;
}
else if (_parentExpander == itemsExpander)
{
charsExpander.IsVisible = true;
locsExpander.IsVisible = true;
}
}
else
{
Debug.WriteLine("The collapsing accordion is NOT the first accordion in the parent expander.");
}
}
else
{
Debug.WriteLine("No parent expander found.");
}
}
}

private void OnAccordionExpanding(object sender_p, Syncfusion.Maui.Accordion.ExpandingAndCollapsingEventArgs e)
{
if(sender_p is SfAccordion _accordion && _accordion is not null)
{
SfExpander _parentExpander;
SfExpander[]? expandersToCheck = [charsExpander, locsExpander, itemsExpander];
foreach (SfExpander expander in expandersToCheck)
{
if (expander.GetVisualTreeDescendants().Any(x => x == _accordion))
{
// Set all other SfExpanders to disappear

if(expander == charsExpander)
{
_parentExpander = charsExpander;
locsExpander.IsVisible = false;
itemsExpander.IsVisible = false;
}
else if(expander == locsExpander)
{
_parentExpander = locsExpander;
charsExpander.IsVisible = false;
itemsExpander.IsVisible = false;
}
else if(expander == itemsExpander)
{
_parentExpander = itemsExpander;
charsExpander.IsVisible = false;
locsExpander.IsVisible = false;
}
return;
}
Debug.WriteLine("No parent expander found.");
}
}
}
В какой -то момент, как только у меня появится эта концепция, каждый из этих sfexpander s (разделы категории) будет добавлен программно, когда пользователь нажимает « Добавьте кнопку категории ». В какой -то момент у XAML может не быть 3 категорий, которые у меня есть сейчас, чтобы начать, поэтому я не уверен, помогает ли это с этим решением или нет, но по сути они не являются постоянными элементами - их можно удалить или создан во время выполнения. практики), которые я должен выполнить, добавить/удалять или другие связанные с пользовательским интерфейсом задачи в представлении (код-и-завод), а не ViewModel. Вопросы о StackOverflow, который я пропустил, точно похожие на этот вопрос, тогда я прошу прощения. все еще решил это - по одной проблеме за раз.)


Подробнее здесь: https://stackoverflow.com/questions/794 ... net-maui-9
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»