将多个文本框绑定到一个对象,MVVM,C#的不同属性

问题描述 投票:0回答:2

这是我在模型中的对象:

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类型?

c# xaml mvvm binding caliburn.micro
2个回答
0
投票

首先,声明您的类“ 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”,然后是该对象的特定属性。


0
投票

每次自定义对象的各个属性更改时,您都需要调用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>
© www.soinside.com 2019 - 2024. All rights reserved.