创建文本框问题?

时间:2014-01-06 12:20:20

标签: c# wpf mvvm

我已经发布了一个上一个问题,但是没有什么帮助,所以我尝试开始编码并自己查找更多内容并且我坚持使用某些代码。我正在尝试关注MVVM

我创建了一个名为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类,如下所示:

namespace MVVModel
{
    class ViewModel
    {

        ObservableCollection<Standard> _title = new ObservableCollection<Standard>();
        ObservableCollection<Standard> _question = new ObservableCollection<Standard>();

    public ViewModel()
    {

    }

    public ObservableCollection<Standard> Title
    {
            get
            {
                return _title;
            }
            set
            {
                _title = value;
            }
     }

     public ObservableCollection<Standard> Question
     {
            get
            {
                return _question;
            }
            set
            {
                _question = value;
            }
     }
     }
}

这是我的XAML:

<Grid>

    <Button x:Name="btnTitle" Content="Title" HorizontalAlignment="Left" Margin="691,22,0,0" VerticalAlignment="Top" Width="75"/>
    <Button x:Name="btnQuestion" Content="Question" HorizontalAlignment="Left" Margin="797,22,0,0" VerticalAlignment="Top" Width="75" Command="{Binding AddTitle}"/>

        <ItemsControl ItemsSource="{Binding Question}" Margin="0,86,0,0">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <TextBox />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>

</Grid>

我只想动态创建一个文本框,但没有显示任何帮助?

2 个答案:

答案 0 :(得分:1)

我在之前的回答中提到过实现INotifyPropertyChanged。

为什么你再次需要在viewModel中收集问题和标题,这已经存在于Standard类中。

您需要在主ViewModel中使用Standard类的集合。如果我理解正确的话,这就是我从你的问题中得到的结果。

以下是INotifyPropertyChanged的实现

public class Standard : INotifyPropertyChanged
{

    public event PropertyChangedEventHandler PropertyChanged;

    // Create the OnPropertyChanged method to raise the event 
      protected void NotifyOfPropertyChanged(string name)
      {
          PropertyChangedEventHandler handler = PropertyChanged;
          if (handler != null)
          {
              handler(this, new PropertyChangedEventArgs(name));
          }
      }

      protected void NotifyOfPropertyChanged<TProperty>(Expression<Func<TProperty> property)
      {
          NotifyOfPropertyChanged(property.GetMemberInfo().Name);
      }

    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);
        }
    }
}

答案 1 :(得分:0)

您必须按照几个步骤完成此任务。

  1. 首先,您需要将Standard的集合绑定到Grid,而不是Question

  2. 其次,您需要将上一个类的属性绑定到文本框。

  3. 例如:

    <DataTemplate>
        <TextBox Text="{Binding Question"} />
    </DataTemplate>
    

    编辑:

    我想提一下这篇文章来帮助你:

    http://www.codeproject.com/Articles/165368/WPF-MVVM-Quick-Start-Tutorial