Привязка ContentPage к свойству макета - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь выучить Xamarin во время изучения паттерна MVVM. Я не знаю, является ли это правильным способом сделать это, но у меня возникают проблемы с привязкой моего ContentPage к моему свойству ViewModels, имеющему тип Layout.

Что я делаю, так это то, что я разбираю файл XML на множество объектов, затем читаю их и преобразую в представления. У меня это работает и отображается нормально, если я установил sh в коде Views, что ContentPages Contents должен иметь этот макет в нем.

Что я пытаюсь сделать, так это привязать содержимое к моему свойству ViewModels.

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:d="http://xamarin.com/schemas/2014/forms/design"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         mc:Ignorable="d"
         x:Class="FireSupportReference.View.ChapterView"
         Title="{Binding pageTitle}"
         x:Name="chapterContentPage"
         Content="{Binding pageLayout}">

Другая привязка работает (установлена ​​в коде Views). Свойство pageLayout имеет тип Layout.

       public Layout pageLayout
    {
        get { return _layout; }
        set { _layout = value; }
    }

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

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Измените тип макета на ContentView и внедрите INotifyPropertyChanged и увеличьте PropertyChanged в установщике

public ContentView _layout;
public ContentView pageLayout
{
   get { return _layout; }
   set { 
         _layout = value; 
         RaisePropertyChanged(nameof(pageLayout));
       }
}
0 голосов
/ 28 апреля 2020

Что я делаю, так это то, что я разбираю файл XML на множество объектов, затем читаю их и преобразую в представления.

Если вы хотите проанализировать файл xml и отобразить эти данные в ContentPage, я думаю, вам может не потребоваться использовать свойство Layout в ViewModel.

Для обычного режима mvvm, У меня есть один вид или шаблон, затем я добавляю в него данные.

Следующий код показывает, как использовать режим mvvm для отображения проанализированных xml данных.

. xml файл, добавив в проект root, затем установите Действие построения - это встроенный ресурс

<?xml version="1.0" encoding="utf-8" ?>
<ArrayOfMonkey xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Monkey>
<Name>Baboon</Name>
<Location>Africa &amp; Asia</Location>
<Details>Baboons are African and Arabian Old World monkeys belonging to the genus Papio, part of the subfamily Cercopithecinae.</Details>
</Monkey>
<Monkey>
<Name>Capuchin Monkey</Name>
<Location>Central &amp; South America</Location>
<Details>The capuchin monkeys are New World monkeys of the subfamily Cebinae. Prior to 2011, the subfamily contained only a single genus, Cebus.</Details>
</Monkey>
<Monkey>
<Name>Blue Monkey</Name>
<Location>Central &amp; East Africa</Location>
<Details>The blue monkey or diademed monkey is a species of Old World monkey native to Central and East Africa, ranging from the upper Congo River basin east to the East African Rift and south to northern Angola and Zambia.</Details>
</Monkey>
<Monkey>
<Name>Squirrel Monkey</Name>
<Location>Central &amp; South America</Location>
<Details>The squirrel monkeys are the New World monkeys of the genus Saimiri. They are the only genus in the subfamily Saimirinae. The name of the genus Saimiri is of Tupi origin, and was also used as an English name by early researchers.</Details>
</Monkey>
<Monkey>
<Name>Golden Lion Tamarin</Name>
<Location>Brazil</Location>
<Details>The golden lion tamarin also known as the golden marmoset, is a small New World monkey of the family Callitrichidae.</Details>
</Monkey>

</ArrayOfMonkey>

Затем пользовательский интерфейс ContentPage для отображения этих данных.

<ContentPage
x:Class="demo3.listviewsample.Page17"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<ContentPage.Content>
    <StackLayout>
        <ListView HasUnevenRows="True" ItemsSource="{Binding monkeys}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Frame BorderColor="Orange" CornerRadius="10">
                            <StackLayout>
                                <Label Text="{Binding Name}" />
                                <Label Text="{Binding Location}" />
                                <Label Text="{Binding Details}" />
                            </StackLayout>
                        </Frame>

                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>
</ContentPage.Content>

 public partial class Page17 : ContentPage
{

    public Page17()
    {
        InitializeComponent();        
        this.BindingContext = new MonkeyViewmodel();
    }
}

public class MonkeyViewmodel
{
    public ObservableCollection<Monkey> monkeys { get; set; }
    public MonkeyViewmodel()
    {
        #region How to load an XML file embedded resource
        var assembly = IntrospectionExtensions.GetTypeInfo(typeof(Page17)).Assembly;
        Stream stream = assembly.GetManifestResourceStream("demo3.MonkeyXML.xml");


        using (var reader = new StreamReader(stream))
        {
            var serializer = new XmlSerializer(typeof(ObservableCollection<Monkey>));
            monkeys = (ObservableCollection<Monkey>)serializer.Deserialize(reader);
        }
        #endregion
    }

}

public class Monkey
{
    public string Name { get; set; }
    public string Location { get; set; }
    public string Details { get; set; }
}

По поводу привязки MVVM и MVVM, пожалуйста, посмотрите:

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/enterprise-application-patterns/mvvm

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/xaml/xaml-basics/data-bindings-to-mvvm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...