我的ViewModel中有自定义对象。
public MyObject PropertyName
{
get { return _propertyName; }
set
{
_propertyName = value;
RaisePropertyChanged(() => PropertyName);
}
}
我想在我的机器人视图中只将其成员之一绑定到textview。找到此链接: Bind data of custom object to TextView in MvvmCross 而我正是这样做的。 local:MvxBind =" Text Myobject.ItsMember"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="LabelCaption" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:textColor="@android:color/white"
local:MvxBind="Text Myobject.ItsMember" />
</RelativeLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
检查了外壳等但是绑定没有工作,当我可以在调试窗口中打印时,我看不到屏幕上出现的字符串值。 我可能出错的任何线索?
答案 0 :(得分:0)
我不能在我的头上重现你的问题。
我试过了:
public class MyViewModel : MvxViewModel
{
private MyModel _model; // this is a class member variable or class member field
public MyModel Model // this is a class member property
{
get => _model;
set => SetProperty(ref _model, value);
}
public MyViewModel()
{
Model = new MyModel { Name = "Herp" };
}
}
public class MyModel : MvxNotifyPropertyChanged
{
private string _name;
public string Name
{
get => _name;
set => SetProperty(ref _name, value);
}
}
然后假设MyViewModel
是DataContext,我使用:
local:MvxBind="Text Model.Name"
工作得很好。
答案 1 :(得分:0)
您无法绑定到某个类型。您需要绑定到该类型的实例。为了使绑定按照您在AXML中设置的方式工作,您需要类似
的内容public class MyType
{
private string _ItsMember;
public string ItsMember
{
get
{
return _ItsMember;
}
set
{
_ItsMember = value;
RaisePropertyChanged (()=>ItsMember);
}
}
}
private MyType _MyObject;
public MyType MyObject
{
get
{
return _MyObject;
}
set
{
_MyObject = value;
RaisePropertyChanged(()=>MyObject);
}
}
这种安排将允许MyObject.ItsMember解析为字符串属性值。如果您的属性不是字符串值,则必须实现一个转换器,这是一个完整的主题。