Привязка MAUI ControlTemplate к модели представления ContentPageC#

Место общения программистов C#
Anonymous
Привязка MAUI ControlTemplate к модели представления ContentPage

Сообщение Anonymous »

Я пытаюсь добавить общий элемент управления, который хочу, чтобы он отображался внизу каждой страницы контента в приложении (все они будут внутри TabBar). Я создал ControlTemplate в своем App.xaml, и появляется средство выбора, которое я разместил внизу, но привязка свойства ItemsSource не работает (нет видимых элементов).
Я' Я не уверен, как заставить это работать. Я новичок в Xamarin/MAUI и открыт для предложений по различным подходам, если я иду в неправильном направлении для достижения этой цели.
Я пробовал использовать TemplateBinding вместо Binding в XAML, и я также поместил те же свойства в файлы кода программной части App.xaml.cs и AppShell.xaml.cs на случай, если привязки перенаправлялись туда, что не имело значения. Я также начал с того, что свойство Environments имело тип Env[], и переключился на ObservableCollection в качестве меры устранения неполадок (хотя коллекция явно статична).
App.xaml





















MyPage.cs
public class MyPage : ContentPage
{
public MyPage()
{
if (!Application.Current!.Resources.TryGetValue("InputPageTemplate", out var resource) ||
resource is not ControlTemplate template)
{
throw new Exception("Missing InputPageTemplate control template");
}

var appConfig = new AppConfig { Environment = Env.B };
ViewModel = new MyViewModel(appConfig);
BindingContext = ViewModel;
ControlTemplate = template;
}
}

MyViewModel.cs
public class MyViewModel
{
public MyViewModel(AppConfig appConfig)
{
AppConfig = appConfig;
}

public AppConfig AppConfig { get; }
public ObservableCollection Environments => new(Enum.GetValues());
}

AppConfig.cs
public class AppConfig : INotifyPropertyChanged
{
private Env _environment;
public Env Environment
{
get => _environment;
set
{
_environment = value;
OnPropertyChanged();
}
}

public event PropertyChangedEventHandler? PropertyChanged;

public void OnPropertyChanged([CallerMemberName] string name = "") =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}

Env.cs
public enum Env
{
A,
B
}


Подробнее здесь: https://stackoverflow.com/questions/751 ... view-model

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