Можно ли как-нибудь привести свойства в класс, не используя наследование? - PullRequest
0 голосов
/ 21 сентября 2018

Я использую Xamarin, который требует, чтобы мой класс CS и XAML наследовали от объекта Xamarin, например:

CS

namespace Japanese.Templates
{
    public partial class TimeIntervalTemplate : ContentView
    {
        public TimeIntervalTemplate()
        {
            InitializeComponent();
        }

        // All my time templates contain this and I would
        // like to not have to repeat these many times in 
        // each time template
        public static readonly BindableProperty SelectedValProperty =
           BindableProperty.Create(
               "SelectedVal", typeof(string), typeof(CardOrderTemplate),
               defaultBindingMode: BindingMode.TwoWay,
               defaultValue: default(string));

        // All my time templates contain this and I would
        // like to not have to repeat these many times in 
        // each time template
        public string SelectedVal
        {
            get { return (string)GetValue(SelectedValProperty); }
            set { SetValue(SelectedValProperty, value); }
        }

XAML

<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
             xmlns:local="clr-namespace:Japanese;assembly=Japanese" 
             xmlns:b="clr-namespace:Behaviors;assembly=Behaviors" 
             x:Class="Japanese.Templates.TimeIntervalTemplate" x:Name="this">
    <StackLayout BackgroundColor="#FFFFFF" Padding="20,0" HeightRequest="49" Margin="0">

Ноодни и те же свойства и объекты здесь используются во многих различных классах:

Я хотел бы просто создать класс BaseTemplate, который наследуется от представления содержимого.Добавьте к этому свойства и затем наследуйте TimeIntervalTemplate от BaseTemplate.Однако, когда я делаю это:

public class BaseTemplate : ContentView
... 

public partial class TimeIntervalTemplate : BaseTemplate
...

Тогда он говорит мне, что я не могу этого сделать, поскольку частичные классы должны наследоваться от одного и того же базового класса.

Есть ли способ обойти это?В любом случае, что я мог бы добавить в свойства, такие как SelectedValProperty .. без наследования от базового класса?

1 Ответ

0 голосов
/ 21 сентября 2018

Вы видите эту ошибку просто потому, что тип базового класса в code-behind отличается от типа базового класса, который вы использовали в XAML.

Как только вы убедитесь, что оба типа базовых классов одинаковы - компилятор XAML будет счастлив.

<?xml version="1.0" encoding="UTF-8"?>
<!-- make sure change root tag from ContentView to base class type -->
<!-- ('jt' represents the tag prefix for xmlms namespace declaration) -->

<jt:BaseTemplate xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:jt="clr-namespace:Japanese.Templates"

    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    xmlns:local="clr-namespace:Japanese;assembly=Japanese" 
    xmlns:b="clr-namespace:Behaviors;assembly=Behaviors" 
    x:Class="Japanese.Templates.TimeIntervalTemplate" x:Name="this">

    <!-- your content here -->

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