Xaml 双向绑定在Xamarin形式下不起作用
我在Xamarin表单项目中工作。表单输入的值未显示在绑定上下文中。绑定上下文始终显示初始值而不是最新值。我已添加了表单xaml部件和视图相关的视图模型类。是否有其他配置来启用双向绑定 Xaml页面Xaml 双向绑定在Xamarin形式下不起作用,xaml,xamarin,binding,xamarin.forms,Xaml,Xamarin,Binding,Xamarin.forms,我在Xamarin表单项目中工作。表单输入的值未显示在绑定上下文中。绑定上下文始终显示初始值而不是最新值。我已添加了表单xaml部件和视图相关的视图模型类。是否有其他配置来启用双向绑定 Xaml页面 <StackLayout Grid.Row="0" Grid.Column="0"> <Grid x:Name="grid"> <Grid.RowDefinitions> <RowDefiniti
<StackLayout Grid.Row="0" Grid.Column="0">
<Grid x:Name="grid">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label x:Name="labelName" Grid.Row="0" Grid.Column="0" Margin="10" FontSize="6" VerticalOptions="CenterAndExpand" HorizontalTextAlignment="Start" Text="Name"/>
<Entry x:Name="textName" Grid.Row="0" Grid.Column="1" WidthRequest="100" FontSize="6" VerticalOptions="CenterAndExpand" HorizontalOptions="Start" HorizontalTextAlignment="Start" Text="{Binding Name,Mode=TwoWay}" />
<Label x:Name="labelAge" Grid.Row="1" Grid.Column="0" Margin="10" FontSize="6" Text="Age" VerticalOptions="CenterAndExpand" HorizontalTextAlignment="Start" />
<Entry x:Name="textAge" Grid.Row="1" Grid.Column="1" WidthRequest="100" FontSize="6" VerticalOptions="CenterAndExpand" HorizontalOptions="Start" HorizontalTextAlignment="Start" Text="{Binding Age,Mode=TwoWay}" />
<Label x:Name="labelAddress" Grid.Row="2" Grid.Column="0" Margin="10" FontSize="6" Text="Address" VerticalOptions="CenterAndExpand" HorizontalTextAlignment="Start" />
<Entry x:Name="textAddress" Grid.Row="2" Grid.Column="1" WidthRequest="100" FontSize="6" VerticalOptions="CenterAndExpand" HorizontalOptions="Start" HorizontalTextAlignment="Start" Text="{Binding Address,Mode=TwoWay}" />
<Label x:Name="labelNICNumber" Grid.Row="3" Grid.Column="0" Margin="10" FontSize="6" Text="NIC" VerticalOptions="CenterAndExpand" HorizontalTextAlignment="Start" />
<Entry x:Name="textNIC" Grid.Row="3" Grid.Column="1" WidthRequest="100" FontSize="6" VerticalOptions="CenterAndExpand" HorizontalOptions="Start" HorizontalTextAlignment="Start" Text="{Binding NIC,Mode=TwoWay}" />
<Button Grid.Row="4" Grid.Column="1" HeightRequest = "30" VerticalOptions="CenterAndExpand" HorizontalOptions="Start" FontSize="6" Text="Save" Clicked="UserSaveClick" />
</Grid>
</StackLayout>
你能查一下吗
1.在条目控件中输入文本时,请检查文本是否到达视图模型中每个属性的断点
2.检查INotifyPropertyChanged是否已实现
3.通过设置入口控件文本属性的硬代码进行检查。您可以检查:
1.在条目控件中输入文本时,请检查文本是否到达视图模型中每个属性的断点
2.检查INotifyPropertyChanged是否已实现
3.通过设置条目控件的文本属性的硬代码进行检查。还应检查setter方法是否为私有方法。我花了几个小时才发现这个简单的复制粘贴错误。 我在调试输出绑定中遇到此错误:“xxx”属性未在“yyyy”上找到,目标属性为:“Xamarin.Forms.Entry.Text”。
顺便说一下,此错误消息不是非常清楚。还要检查setter方法是否为非私有方法。我花了几个小时才发现这个简单的复制粘贴错误。 我在调试输出绑定中遇到此错误:“xxx”属性未在“yyyy”上找到,目标属性为:“Xamarin.Forms.Entry.Text”。
顺便说一下,此错误消息不是非常清楚。您是否尝试在codebehind中输入绑定?是的,我将视图模型分配给绑定上下文,并在调试时间检查绑定上下文您的虚拟机是否实现了
INotifyPropertyChanged
?您是否检查了虚拟机中的值是否已更新?您希望使用哪些值更改?您是否尝试在codebehind中输入绑定?是的,我将视图模型分配给绑定上下文,并在调试时间检查绑定上下文您的虚拟机是否实现了INotifyPropertyChanged
?您是否检查了虚拟机中的值是否已更新?您希望更改哪些值?
public event PropertyChangedEventHandler PropertyChanged;
private string userName ;
private string name;
private int age ;
private bool isBusy;
private string address;
private int nic;
void OnPropertyChanged([CallerMemberName] string name = "")
{
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(name));
}
public int NIC
{
get { return nic; }
set
{
nic = value;
OnPropertyChanged();
}
}
public string Name
{
get { return name; }
set
{
name = value;
IsBusy = Name == "aa" ? true : false;
OnPropertyChanged();
OnPropertyChanged(nameof(DisplayMessage));
}
}
public int Age
{
get { return age; }
set
{
age = value;
OnPropertyChanged();
}
}
public string Address
{
get { return address; }
set
{
address = value;
OnPropertyChanged();
}
}
public string DisplayMessage
{
get
{
return "Hi " + name;
}
}
public bool IsBusy
{
get { return isBusy; }
set { isBusy = value; }
}
}