Привязка нескольких TextBox к различным свойствам одного объекта, MVVM, C# - PullRequest
0 голосов
/ 27 февраля 2020

Вот мой объект в модели:

public class Object
{
   public int Id { get; set; }
   public string Property1 { get; set; }
   public string Property2 { get; set; }
}

А вот мой объект в модели представления:

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, я передаю один объект, а не несколько свойств. Это возможно, или мне просто нужно создать новое свойство типа string?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Вам необходимо вызывать 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>
0 голосов
/ 27 февраля 2020

Прежде всего, объявление вашего класса "Object" в основном перезаписывает базовый класс DEFAULT для Object. Дайте ему более реалистичное c имя, даже если '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}"/>

Binding переходит к общедоступному имени объекта «MyBindToTestObject», а затем к указанному c свойству этого объекта.

...