确定要更新的文本框

时间:2019-02-25 08:49:59

标签: c# wpf mvvm

编辑:使问题更容易。

模型

public class Human
    {
        public string Name { get; set; }
    }

ViewModel

public class HumanViewModel : INotifyPropertyChanged
{
    private Human human;
    public HumanViewModel()
    {
        human = new Human();
    }

    public string TxtHumanName
    {
        get => Human.Name;
        set
        {
            Human.Name = value;
            InvokePropertyChanged("Name");
        }
    }

    private void InvokePropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

在我的XAML中,我需要2个texbox,即

Human1:[] <-humanName1txtBox

Human2:[] <-humanName2txtBox

在我的xaml.cs文件中,我将创建将为人类分配名称的Task。 (据我了解,这类代码应该在其他地方)。

public Task SetName(HumanViewModel humanVM, string name)
    {
        humanVM.TxtHumanName = name;
        return Task.CompletedTask;
    }

想象一下,多次运行此任务集名称。我该如何分配它,以便它第一次更新humanName1txtBox,第二次更新humanName2txtBox

1 个答案:

答案 0 :(得分:0)

当您重复执行某些操作时,您应该考虑一个itemcontrol,并将这些模板模板到UI中。

将项源绑定到可观察的集合rowvm,其中rowvm是每行的视图模型。它被模板化到文本框或任何您需要的内容中,并且逻辑进入rowvm。因此,它“知道”要更新的内容,因为它本身就可以。

关于MVVM的非常简单的介绍文章。您可能想要的不仅仅是行视图模型的字符串,更复杂的东西:

https://social.technet.microsoft.com/wiki/contents/articles/32164.wpf-mvvm-step-by-step-2.aspx

不确定确切要做什么,但是会有类似的东西

public rowVM : BaseViewModel
{
    private Task<result> doSomething
     {
       …..
     }
    public string WhateverYourTextIs  // propfull
}

每个视图都以模板显示在行中。

每当您要执行流程时,就启动该任务并等待它。返回结果,然后您就可以对该结果执行任何操作。