MAUI: Команды в CollectionView DataTemplate не стреляете после установки BindingContext в представлении ребенкаC#

Место общения программистов C#
Ответить
Anonymous
 MAUI: Команды в CollectionView DataTemplate не стреляете после установки BindingContext в представлении ребенка

Сообщение Anonymous »

У меня есть страница Maui на основе оболочки (CategorioryPage), на которой находится многократно используемый представление (CategoriesView), содержащая коллекцию. В Onpapering я установил только BindingContext только на категории, но моя кнопка скрыть/шоу в DataTemplate никогда не получает правильную категорию, а команда никогда не сжигает. Поскольку я установил BindingContext только на родительских категориях, проведенных , я предположил, что привязки в представлениях ребенка все равно будут регулироваться должным образом. Тем не менее, команда никогда не стреляет, и параметр кажется нулевым или неверным. < /P>
ниже мой вид < /p>


























< /code>
c# код для просмотра < /p>
namespace MoneyManager.UI.Views.Categories;

public partial class CategoriesView : ContentView
{
public CategoriesView()
{
InitializeComponent();
}

}
< /code>
Страница для просмотра < /p>







< /code>
код за страницей < /p>
using MoneyManager.UI.ViewModels.Categories;

namespace MoneyManager.UI.Pages.Categories;

[QueryProperty(nameof(CategoryType), "type")]
public partial class CategoriesPage : ContentPage
{
public string? CategoryType { get; set; }

public CategoriesPage()
{
InitializeComponent();

}

protected override void OnAppearing()
{
base.OnAppearing();

((AppShell)Shell.Current).DynamicTitle = CategoryType switch
{
"Income" => "Income Categories",
"Expense" => "Expense Categories",
_ => "Categories"
};

var vm = new CategoriesViewModel
{
CategoryType = CategoryType
};

CategoriesView.BindingContext = vm;
}
}
< /code>
viewmodel < /p>
public partial class CategoriesViewModel : ObservableObject
{
private string? categoryType;
public IRelayCommand ToggleHidden { get; }

public CategoriesViewModel()
{
ToggleHidden = new RelayCommand(execute: ToggleHiding);
}
public string? CategoryType
{
get => categoryType;
set
{
if (SetProperty(ref categoryType, value))
{
LoadCategoriesAsync();
}
}
}
public ObservableCollection Categories { get; } = [];
private async void LoadCategoriesAsync()
{
try
{
Categories.Clear();

var isExpense = string.Equals(CategoryType, "Expense", StringComparison.OrdinalIgnoreCase);

await Task.Run(() => CategoryManager.LoadCategories(isExpense));

foreach (var item in CategoryManager.Categories)
{
Categories.Add(item);
}

#if DEBUG
Debug.WriteLine("[Success] Categories populated.");
#endif
}
catch (Exception ex)
{
Logger.Log("ViewModels.Categories.CategoriesViewModel.LoadCategoriesAsync", ex);
#if DEBUG
Debug.WriteLine($"[Exception] Category fetch failed: {ex.Message}");
#endif
}
}

public void ToggleHiding(CategoryDto? category)
{
if (category is null)
{
return;
}

var newHiddenState = !category.IsHidden;

category.IsHidden = newHiddenState;

if (newHiddenState)
{
AppPreferences.SetCategoryHidden(category.Id);
}
else
{
AppPreferences.ClearHiddenState(category.Id);
}

Debug.WriteLine("[Toggle]" + category.IsHidden);
}

}


Подробнее здесь: https://stackoverflow.com/questions/797 ... -bindingco
Ответить

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

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

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

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

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