2016-07-27 9 views
1

ユーザーは、ボタンを押して動的にテキストボックスを追加するオプションがあり、各テキストボックスには検索対象から除外するディレクトリのパスを含むソートを作成しようとしています。これは、コードビハインドを使用して比較的簡単ですが、私の問題は、適切なMVVMでそれをやっている。動的テキストボックスのバインド

構造のための一般的なマークアップは次のとおりです。

<ScrollViewer > 
    <StackPanel> 
     <DockPanel LastChildFill="False"> 
      <TextBox DockPanel.Dock="Left"/> 
      <Button DockPanel.Dock="Right" 
        Content="+"/> 
     </DockPanel> 
    </StackPanel> 
</ScrollViewer> 

ボタンをクリックすると、StackPanelTextBoxButtonで新しいDockPanelを追加します。一番下のボタンを除くすべてのボタンはマイナス記号に変わります。どうやってすべてのテキストボックスのテキストにバインドできますか?

一度/これが実現すれば、それを独自のコンポーネントにする方がよいでしょうか?

CS(ビューモデル)::

// INotifyPropertyChanged if you need, as well as full-properties with notification 
public class Item 
{ 
    public string Text {get; set;} 
} 

public ObservableCollection<Item> Items { get; } = new ObservableCollection<Item>(); 

void OnCommandAdd() => Items.Add(new Item()); 

XAML(ビュー):

<ListBox ItemsSource="{Binding Items}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBox Text="{Binding Text}" /> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

アイデアはにできるコントロールを使用することですあなたが始めるために

+2

MVVMを使用することをお勧めします。解決策がコードビハインドで簡単な場合は、それを実行してください。 – toroveneno

答えて

3

クイック擬似コード表示リスト(例えば、ItemsControl)、およびビューモデル内のアイテムのコレクション。表示する新しい要素を追加するには、そのコレクションにアイテムを追加します。

すべてTextBoxは、項目の対応するプロパティにバインドされたTextを持ちます。

関連する問題