这是我在模型中的对象:
public class Object
{
public int Id { get; set; }
public string Property1 { get; set; }
public string Property2 { get; set; }
}
这是我在ViewModel中的对象:
private Object_object;
public string Object
{
get { return _object; }
set
{
_object = value;
NotifyOfPropertyChange(() => Object);
}
}
我正在使用Caliburn Micro作为我的MVVM框架。
这是视图中的XAML:
<TextBox Text="{Binding Object.Property1, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"/>
我想将TextBox值绑定到对象的属性。这样,当我将对象传递给另一个ViewModel时,我传递的是一个Object,而不是很多属性。这是否可能,或者我是否仅需要创建一个新属性作为string
类型?
首先,声明您的类“ Object”基本上是覆盖Object的DEFAULT基类。给它一个更真实的名称,即使'MyTestObject'
定义您的自定义类
public class MyTestObject
{
public int Id { get; set; }
public string Property1 { get; set; }
public string Property2 { get; set; }
}
在视图模型中实现
private MyTestObject _myBindToTestObject;
public MyTestObject MyBindToTestObject
{
get { return _myBindToTestObject; }
set
{
_myBindToTestObject = value;
NotifyOfPropertyChange(() => MyTestObject);
}
}
最终绑定到表单
<TextBox Text="{Binding MyBindToTestObject.Property1, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"/>
绑定将转到公开显示的对象名称“ MyBindToTestObject”,然后是该对象的特定属性。
每次自定义对象的各个属性更改时,您都需要调用NotifyOfPropertyChanged。例如,
public class Foo : PropertyChangedBase
{
private string property1;
private string property2;
private int id;
public int Id
{
get => id;
set
{
id = value;
NotifyOfPropertyChange(nameof(Id));
}
}
public string Property1
{
get => property1;
set
{
property1 = value;
NotifyOfPropertyChange(nameof(Property1));
}
}
public string Property2
{
get => property2;
set
{
property2 = value;
NotifyOfPropertyChange(nameof(property2));
}
}
}
现在您可以使用绑定到自定义对象的各个属性。
<TextBox Text="{Binding FooInstance.Property2}"></TextBox>