'local: Class1' используется как расширение разметки, но это глюк - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть ContentPage с двумя ContentViews на нем, и я хочу установить контекст привязки для каждого из них.

<Label 
    BindingContext="{Binding Source ={local:ViewModel1 }}" 
    Text="{Binding LabelText}" 
    HorizontalOptions="Center" 
    HorizontalTextAlignment="Center" />
<Label 
    BindingContext="{Binding Source ={local:ViewModel2 }}" 
    Text="{Binding LabelText}" 
    HorizontalOptions="Center" 
    HorizontalTextAlignment="Center" />

И это работает, но у меня есть ошибка -

 'local:ViewModel1' is used like a markup extension but
 'local:ViewModel2' is used like a markup extension but

без причины

1 Ответ

0 голосов
/ 03 апреля 2020

Вы можете попробовать код ниже.

ViewModel1.cs:

class ViewModel1 : INotifyPropertyChanged
{
    private string _labelText;
    public string LabelText
    {
        set
        {
            if (_labelText != value)
            {
                _labelText = value;
                if (PropertyChanged != null)
               {
                    PropertyChanged(this, new PropertyChangedEventArgs("LabelText"));
                }
            }
        }
        get
        {
            return _labelText;
        }
    }

   public event PropertyChangedEventHandler PropertyChanged;
    public ViewModel1()
    {
        this.LabelText = "hello_1";
    }
}

ViewModel2.cs:

class ViewModel2 : INotifyPropertyChanged
{
    private string _labelText2;
    public string LabelText
    {
        set
        {
            if (_labelText2 != value)
            {
                _labelText2 = value;
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("LabelText"));
                }
            }
        }
        get
        {
            return _labelText2;
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    public ViewModel2()
    {
        this.LabelText = "hello_2";
    }
 }

Xaml:

<ContentView>
    <StackLayout>
        <Label
            FontSize="Large"
            Text="{Binding LabelText}">
            <Label.BindingContext>
                <local:ViewModel1 />
            </Label.BindingContext>
        </Label>
        <Label
            FontSize="Large"
            Text="{Binding LabelText}">
            <Label.BindingContext>
                <local:ViewModel2 />
            </Label.BindingContext>
        </Label>
    </StackLayout>
</ContentView>

enter image description here

Для получения дополнительной информации о том, как установить BindingContext метки, вы можете обратиться к документам MS. https://docs.microsoft.com/en-us/xamarin/xamarin-forms/xaml/xaml-basics/data-bindings-to-mvvm

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