【发布时间】:2018-12-09 18:01:39
【问题描述】:
我知道这个问题以前已经被问过很多次了,但是每种情况都有点“独特”,让我们这样说吧。
我的环境是 Visual Studio 15.7.4,使用更新到最新版本的所有 Nuget 包(首先是 Xamarin.Forms)。
问题是我创建了一个简单的绑定测试应用程序,绑定不再起作用了! 前段时间我已经使用 Xamarin.Forms 创建了一个 Android 应用程序,并且一切正常。 现在所有绑定都像“OneTime”一样工作,在开始时只设置一次,而不是在 UI 中更新(但仍会更新主 ViewModel 中的数据)。
我想知道这是否是一般的 Xamarin 问题,或者只是我做错了什么。 我已经尝试了所有可能的方法,但没有任何改变。
这是完整的代码(为了测试,创建一个 Xamarin.Forms 应用程序,并选择“共享项目”;我通常将所有逻辑应用程序代码放在项目的共享部分中):
App.cs
namespace App1
{
public partial class App : Application
{
public static AppViewModel ViewModel { get; set; }
public App ()
{
InitializeComponent();
ViewModel = new AppViewModel();
MainPage = new MainPage();
}
// Other App lifecycle methods
}
}
AppViewModel.cs
namespace App1.ViewModels
{
public class AppViewModel : BaseBind
{
public AppViewModel()
{
TestoProva = "---";
BoolProva = false;
}
private string testoProva;
public String TestoProva
{
get { return testoProva; }
set
{
SetProperty(ref testoProva, value);
}
}
private bool boolProva;
public Boolean BoolProva
{
get { return boolProva; }
set { SetProperty(ref boolProva, value); }
}
}
}
主页
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:App1"
xmlns:vm="clr-namespace:App1.ViewModels"
x:Class="App1.MainPage">
<ContentPage.BindingContext>
<vm:AppViewModel/>
</ContentPage.BindingContext>
<StackLayout>
<Label Text="{Binding TestoProva, Mode=OneWay}"/>
<Button Text="Test" Clicked="Test"/>
</StackLayout>
</ContentPage>
MainPage.cs
namespace App1
{
public partial class MainPage : ContentPage
{
public static AppViewModel ViewModel => App.ViewModel;
public MainPage()
{
InitializeComponent();
BindingContext = ViewModel;
}
public void Test()
{
ViewModel.TestoProva = "TESTO CAMBIATO!!!";
}
}
}
BaseBind.cs
namespace App1.ViewModels
{
public class BaseBind
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string propertyName = null) =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
protected bool SetProperty<T>(ref T storage, T value,
[CallerMemberName] String propertyName = null)
{
if (object.Equals(storage, value)) return false;
storage = value;
OnPropertyChanged(propertyName);
return true;
}
}
}
就是这样……一个简单的应用测试,因为我工作的那个也显示这个问题。
真的很想知道什么是错的..me 或 Xamarin 框架。
感谢大家的关注和耐心。
【问题讨论】:
标签: xamarin data-binding xamarin.forms