У меня есть страница 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
MAUI: Команды в CollectionView DataTemplate не стреляете после установки BindingContext в представлении ребенка ⇐ C#
Место общения программистов C#
1755069809
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);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79733643/maui-commands-in-collectionview-datatemplate-not-firing-after-setting-bindingco[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия