MVVM Cross local:MvxBind 为空白
MVVM Cross local:MvxBind is blank
重要说明:这曾经在 MVVM Cross V3.5 上工作,但在升级到 V6.4.2 后它停止工作了。
在广泛使用 MVVM Cross 的项目中,有自定义的 textview。
<custom.HeaderTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/marg_top"
android:layout_marginBottom="@dimen/marg_top"
android:gravity="center"
local:MvxBind="Text SearchCriteria"
android:layout_gravity="center_horizontal"
android:textAllCaps="true" />
local:MvxBind="Text SearchCriteria"
指向确实 return 文本的视图模型:
public string SearchCriteria => Resource.SearchCriteria;
并且字符串存在于资源中:
public static string SearchCriteria {
get {
return ResourceManager.GetString("SearchCriteria", resourceCulture);
}
}
由于某些原因,当 运行 时它总是在屏幕上显示为空白。如果我用标准 android 替换文本字段并使用标准分配,文本就会显示出来。
android:text="@string/test_string"
所以我知道文本字段在那里,它在屏幕上并且没有任何东西阻挡它,只是文本值由于某种原因没有设置或没有呈现(不确定是哪个)。你能告诉我问题可能是什么吗?如果需要更多信息,请询问。谢谢。
更新
我在 setter/getter 中为绑定值添加了断点:
public string SearchCriteria
{
get => searchCriteria; // Does not get called
set => SetProperty(ref searchCriteria, value); // Is called with an actual value
}
并且只有 setter 触发(带有值),getter 永远不会触发。
Update 对于进一步的上下文,我们尝试使用 ViewModel 文本 getter 直接在视图中的按钮上设置文本并且它有效。所以 XML 绑定中存在某种我们不理解的问题。
Button = view.FindViewById<Button>(Resource.Id.Button);
Button.Text = ViewModel.SearchCriteria
我们还确保明确绑定视图模型和视图:
ClaimsHistorySearchViewFragment_ : MvxFragment<ClaimsHistorySearchViewModel>
更新 我们发现视图模型存在更多问题。当我们为 ProptertyChange 分配一个值并显式更改一个值时,PropertyChanged 没有触发:
public override void OnViewCreated(View view, Bundle savedInstanceState)
{
base.OnViewCreated(view, savedInstanceState);
ViewModel.PropertyChanged += _model_PropertyChanged;
ViewModel.ErrorCode = 0; // _model_PropertyChanged Does NOT fire
}
注意 当我们使用 fluent mvvm 交叉绑定时绑定有效,但当我们使用 localmvx 绑定时绑定无效
如果您继承自 TextView
,您可以尝试使用 TextView
使用的 target binding 在 Setup
> FillTargetFactories
上注册绑定:
registry.RegisterCustomBindingFactory<HeaderTextView>(
"Text",
textView => new MvxTextViewTextTargetBinding(textView));
高
我的导入中有一个 space
xmlns:local="http://schemas.android.com/apk/res-auto
我删除它后,它就修复了
重要说明:这曾经在 MVVM Cross V3.5 上工作,但在升级到 V6.4.2 后它停止工作了。
在广泛使用 MVVM Cross 的项目中,有自定义的 textview。
<custom.HeaderTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/marg_top"
android:layout_marginBottom="@dimen/marg_top"
android:gravity="center"
local:MvxBind="Text SearchCriteria"
android:layout_gravity="center_horizontal"
android:textAllCaps="true" />
local:MvxBind="Text SearchCriteria"
指向确实 return 文本的视图模型:
public string SearchCriteria => Resource.SearchCriteria;
并且字符串存在于资源中:
public static string SearchCriteria {
get {
return ResourceManager.GetString("SearchCriteria", resourceCulture);
}
}
由于某些原因,当 运行 时它总是在屏幕上显示为空白。如果我用标准 android 替换文本字段并使用标准分配,文本就会显示出来。
android:text="@string/test_string"
所以我知道文本字段在那里,它在屏幕上并且没有任何东西阻挡它,只是文本值由于某种原因没有设置或没有呈现(不确定是哪个)。你能告诉我问题可能是什么吗?如果需要更多信息,请询问。谢谢。
更新
我在 setter/getter 中为绑定值添加了断点:
public string SearchCriteria
{
get => searchCriteria; // Does not get called
set => SetProperty(ref searchCriteria, value); // Is called with an actual value
}
并且只有 setter 触发(带有值),getter 永远不会触发。
Update 对于进一步的上下文,我们尝试使用 ViewModel 文本 getter 直接在视图中的按钮上设置文本并且它有效。所以 XML 绑定中存在某种我们不理解的问题。
Button = view.FindViewById<Button>(Resource.Id.Button);
Button.Text = ViewModel.SearchCriteria
我们还确保明确绑定视图模型和视图:
ClaimsHistorySearchViewFragment_ : MvxFragment<ClaimsHistorySearchViewModel>
更新 我们发现视图模型存在更多问题。当我们为 ProptertyChange 分配一个值并显式更改一个值时,PropertyChanged 没有触发:
public override void OnViewCreated(View view, Bundle savedInstanceState)
{
base.OnViewCreated(view, savedInstanceState);
ViewModel.PropertyChanged += _model_PropertyChanged;
ViewModel.ErrorCode = 0; // _model_PropertyChanged Does NOT fire
}
注意 当我们使用 fluent mvvm 交叉绑定时绑定有效,但当我们使用 localmvx 绑定时绑定无效
如果您继承自 TextView
,您可以尝试使用 TextView
使用的 target binding 在 Setup
> FillTargetFactories
上注册绑定:
registry.RegisterCustomBindingFactory<HeaderTextView>(
"Text",
textView => new MvxTextViewTextTargetBinding(textView));
高
我的导入中有一个 space
xmlns:local="http://schemas.android.com/apk/res-auto
我删除它后,它就修复了