动态创建文本框 MVVM?

3
我可以在C#代码中动态创建文本框,这一点我已经实现了,但人们一直在说我需要遵循MVVM模式,我研究了一下,发现它似乎非常难,而且我也无法适应它。
我需要动态创建文本框,将文本框中的信息保存到SQL中,然后能够重新打开它。
这里是描述我需要做的事情的图片:
https://istack.dev59.com/cx9jM.webp 不使用MVVM模式是否可能实现?
我只需要一个推动力和解释如何实现它,我不想得到所有的代码。
编辑1:
我不知道这是否正确。
我已经创建了一个名为“Standard”的类,它看起来像这样:
namespace MVVModel
{
public class Standard
{

    string _title;
    string _question;



    public string Title
    {
        get { return _title; }
        set { _title = value; }
    }

    public string Question
    {
        get { return _question; }
        set { _question = value; }
    }
}
}

现在我要创建一个 ViewModel,需要放什么内容?


我有点不理解为什么要动态创建 TextBox?我理解通常的问卷调查数据都是存储在数据库中的。 - Anatoliy Nikolaev
@AnatoliyNikolaev 因为用户可以添加任意数量的标题和问题,所以它们不应受限制,因此我不能只是简单地放置文本框。 - user3157821
1个回答

6
您可以使用

标签


<ItemsControl ItemsSource="{Binding StandardCollection}">
    <ItemsControl.ItemTemplate>
        <DataTemplate DataType="{x:Type Standard}">
            <Grid>
                <TextBox Text={Binding Title} />
                <ItemsControl ItemsSource="{Binding Questions}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <TextBox Text={Binding} />
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </Grid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

这个与你的viewModel中的任何集合绑定。

您可以在集合中添加任意数量的项目。

更新:

public class Standard
{
    string _title;
    ObservableCollection<string> _questions;        

    public string Title
    {
        get { return _title; }
        set { 
            _title = value;
            NotifyOfPropertyChanged(()=>Title);
        }
    }

    public ObservableCollection<string> Questions
    {
        get { return _questions; }
        set { 
            _questions = value;
            NotifyOfPropertyChanged(()=>Questions);
        }
    }
}

public class StandardViewModel
{
    private ObservableCollection<Standard> _standardCollection;
    public ObservableCollection<Standard> StandardCollection{
        get
        {
            return _standardCollection;            
        }
        set{
            _standardCollection = value;
            NotifyOfPropertyChanged(()=>StandardCollection);
        }
    }
}

看一下你的图表1:似乎每个标题下面都有多个问题。那么这里是解决方案。

是的,你需要使用Standard类来使它更简单。

抱歉,我现在没有Visual Studio,我只是在NotePad中编写了这段代码,然后粘贴在这里。不确定是否存在错误。但这只是一个高级别的想法。


那么这意味着我可以创建任意数量的文本框?如果是这样的话..我如何定义标题或问题按钮点击的位置。 - user3157821
通过 Binding,您需要定义一个包含文本框所需所有信息的对象,并绑定每个属性。 - WiiMaxx
@WiiMaxx,从我编辑过的问题来看,这个操作应该在Standard类还是我即将创建的ViewModel类中完成?+ 我需要那个标准类吗? - user3157821
@TheIndianProgrammer,感谢您的回答,我现在会仔细审查它,以确保我能够理解其中的所有内容。 - user3157821

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接