Тест свойства Text надписи <-binding-> метки (ниже для кода) не работает, но свойство Text для Button i делает привязку к другому объекту, отправленному в эту viewModel, и работает нормально. Я просто хотел бы понять, почему Binding не работает как обычно
Во-первых, вы можете связать только свойство, а не поле. замените ваш код:
private string _test;
public string test
{
get { return _test; }
set
{
_test = value;
NotifyPropertyChanged("test");
}
}
public PopupViewModel(Func<bool> metodoParam, Tarefa TarefaParam)
{
this.tarefa = new Tarefa();
ExecutarCommand = new Command(ExecutarAction);
test = "this is test!";
}
О Path = "" и Source = "", я сделаю один пример для вас.
Вот класс представления модели:
public class viewmodel1: INotifyPropertyChanged
{
private string _test;
public string test
{
get
{
return _test;
}
set
{
_test = value;
RaisePropertyChanged("test");
}
}
public Command command1 { get; set; }
public viewmodel1()
{
test = "this is test!";
command1 = new Command(method1);
}
private void method1()
{
Console.WriteLine("this is test!!!!!!!");
}
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Вот вид:
<ContentPage
x:Class="demo2.simplecontrol.Page18"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:model="clr-namespace:demo2.simplecontrol">
<ContentPage.BindingContext>
<model:viewmodel1 x:Name="data1" />
</ContentPage.BindingContext>
<ContentPage.Content>
<StackLayout>
<Label
HorizontalOptions="CenterAndExpand"
Text="{Binding Path=test, Source={x:Reference data1}}"
VerticalOptions="CenterAndExpand" />
<Button Command="{Binding Path=command1, Source={x:Reference data1}}" Text="click1" />
</StackLayout>
</ContentPage.Content>
Более подробную информацию, вы можете посмотреть:
https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/data-binding/binding-path
Если мой ответ поможетпожалуйста, не забудьте пометить мой ответ как ответ, спасибо.