WPF: уведомить свойство модели из другой модели представления - PullRequest
0 голосов
/ 11 ноября 2018

я новичок в WPF MVVM

У меня есть 3 класса здесь (все классы имеют одинаковый BaseParent):

---- Проблема ----> Всякий раз, когда я устанавливаю свой BaseParents GroupContent в [DPropertyViewModel], он не обновляет мой ConsoleText в [DConsoleViewModel].

Модель:

 public class BaseDParent
{
    public string GroupType { get; set; } = "None";

    public string GroupName { get; set; } = "None";

    public string GroupContent
    {
        get => _groupcontent;
        set
        {
            _groupcontent = value;
            SetContent();
        }
    }
    private string _groupcontent;}

ViewModel:

 public class DConsoleViewModel : DNotify
{
    public BaseDParent DElement
    {
        get => _delement;
        set
        {
            _delement = value;
            NotifyPropertyChanged();
        }
    }
    private BaseDParent _delement;

    public string ConsoleText
    {
        get => DElement.GroupContent;
        set
        {
            DElement.GroupContent = value;
            NotifyPropertyChanged();
        }
    }}

и вот где я могу изменить свой BaseParents GroupContent:

public class DPropertyViewModel : DNotify
{
    public BaseDParent DElement
    {
        get => _delement;
        set
        {
            _delement = value;
            NotifyPropertyChanged();
        }
    }
    private BaseDParent _delement;

    public string Level { get; set; } = "0"; 
    public string Property { get; set; } = "Property"; 
    public string Value { get; set; } = "-Null-";

    public void SetDElementPropertyValue()
    {
        string startline = " " + DElement.GroupType + " " + DElement.GroupName + DHelper.NewLine();
        string subpropline = DHelper.NewLine() + Level + " " + Property + " ";

        int start = DElement.GroupContent.IndexOf(startline);

        int propstart = DElement.GroupContent.IndexOf(subpropline, start - 3) + subpropline.Length;
        int propnext = DElement.GroupContent.IndexOf(DHelper.NewLine(), propstart);
        string propvalue = DElement.GroupContent.Substring(propstart, propnext - propstart);

        string toremove = subpropline + propvalue + DHelper.NewLine();
        int toaddindex = DElement.GroupContent.IndexOf(toremove);
        DElement.GroupContent = DElement.GroupContent.RemoveSub(toremove);

        string toadd = subpropline + Value + DHelper.NewLine();
        DElement.GroupContent = DElement.GroupContent.Insert(toaddindex, toadd);
    }
}

Спасибо за вашу помощь:)

1 Ответ

0 голосов
/ 11 ноября 2018

Интерфейс INotifyPropertyChanged используется для уведомления клиентов, обычно связанных клиентов, об изменении значения свойства. - Документы Microsoft на INotifyPropertyChanged

В вашей модели BaseDParent вы должны реализовывать INotifyPropertyChanged, потому что именно здесь меняются значения, а не в ViewModel.

Затем вы можете удалить ConsoleText из вашей ViewModel и связать напрямую с BaseDParent.GroupContent для вашего вывода.

В текущем состоянии ваше свойство DElement в DConsoleViewModel вызывает изменения, относящиеся к самой ссылке на объект. например от нуля до составной версии BaseDParent.

Документы Microsoft по теме: https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.inotifypropertychanged?view=netframework-4.7.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...