0

これは、動作させるための単なるテストアプリケーションです

私のメインページは、テキストボックスを作成するためのコードを保持するビューモデルにバインドします

ここに私のxamlがあります

<StackPanel x:Name="StackSG" Grid.Row="1" Grid.Column="0"/>
<StackPanel x:Name="StackSGName" Grid.Row="1" Grid.Column="1"/>

次に、実際にテキスト ボックスを生成するためのボタンがあります。スタックパネルを定義してテキストボックスを作成する方法は次のとおりです。

 private StackPanel stackSG;
    public StackPanel StackSG
    {
        get { return stackSG; }
        set { stackSG = value; OnNotifyPropertyChanged("StackSG"); }
    }

    private StackPanel stackSGName;
    public StackPanel StackSGName
    {
        get { return stackSGName; }
        set { stackSGName = value; OnNotifyPropertyChanged("StackSGName"); }
    }

そして、ここでテキストボックスを追加してみます

private void Generate(object obj)
    {
        StackSG = new StackPanel();
        StackSGName = new StackPanel();

        int st = 10;
        for (int i = 0; i < st; i++)
        {
            TextBox txtSG = new TextBox();
            txtSG.Name = string.Format("{0}{1}", "Te", i.ToString());
            txtSG.Height = 25;
            txtSG.Text = string.Format("{0}{1}", "Te", i.ToString());
            txtSG.IsReadOnly = true;
            StackSG.Children.Add(txtSG);

            //Add SG name textboxes                        
            TextBox txtSGName = new TextBox();
            txtSGName.Name = string.Format("{0}{1}", "Test", i.ToString());
            txtSGName.Height = 25;
            txtSGName.Text = string.Format("{0}{1}", "Test", i.ToString());
            txtSGName.IsReadOnly = true;
            StackSGName.Children.Add(txtSGName);
        }
    }

エラーなしで実行されますが、テキスト ボックスに広告が表示されません。

4

1 に答える 1

0

多分これはあなたを少し助けることができます:

xaml

<Grid x:Name="LayoutRoot" Background="White">
    <Grid.ColumnDefinitions>
        <ColumnDefinition></ColumnDefinition>
        <ColumnDefinition></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <StackPanel x:Name="StackSG" Grid.Row="0" Grid.Column="0">
        <ListBox ItemsSource="{Binding StackSG}"/>
    </StackPanel>
    <StackPanel x:Name="StackSGName" Grid.Row="0" Grid.Column="1" >
        <ListBox ItemsSource="{Binding StackSGName}"/>
    </StackPanel>
</Grid>

コードビハインド:

public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();
        this.DataContext = new ViewModel(); 
    }
}

ビューモデル:

public class ViewModel : INotifyPropertyChanged
{
    public ViewModel()
    {
        StackSG = new List<TextBox>();
        StackSGName = new List<TextBox>();
        Generate(null);
    }

    private IEnumerable stackSG;
    public IEnumerable StackSG
    {
        get { return stackSG; }
        set
        {
            stackSG = value;
            OnNotifyPropertyChanged("StackSG");
        }
    }

    private IEnumerable stackSGName;
    public IEnumerable StackSGName
    {
        get { return stackSGName; }
        set
        {
            stackSGName = value;
            OnNotifyPropertyChanged("StackSGName");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    public void OnNotifyPropertyChanged(string propName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propName));
        }
    }

    private void Generate(object obj)
    {
        IList<TextBox> StackSGTmp = new List<TextBox>();
        IList<TextBox> StackSGNameTmp = new List<TextBox>();

        int st = 10;
        for (int i = 0; i < st; i++)
        {
            TextBox txtSG = new TextBox();
            txtSG.Name = string.Format("{0}{1}", "Te", i.ToString());
            txtSG.Height = 25;
            txtSG.Text = string.Format("{0}{1}", "Te", i.ToString());
            txtSG.IsReadOnly = true;
            StackSGTmp.Add(txtSG);

            //Add SG name textboxes                        
            TextBox txtSGName = new TextBox();
            txtSGName.Name = string.Format("{0}{1}", "Test", i.ToString());
            txtSGName.Height = 25;
            txtSGName.Text = string.Format("{0}{1}", "Test", i.ToString());
            txtSGName.IsReadOnly = true;
            StackSGNameTmp.Add(txtSGName);
        }

        StackSG = StackSGTmp;
        StackSGName = StackSGNameTmp;
    }
}
于 2013-07-30T14:47:48.213 に答える