2014-01-03 4 views
1

Привет я famliar с окна формы, теперь я собираюсь начать WPF, в окнах я сбросить управления со следующим рекурсивным методомЦитирование с помощью Wpf tabitem Управление с помощью C#?

internal void clrCntrls(Control cntrl) 
    { 
     if (cntrl.GetType() == typeof(TextBox)) 
     { 
      TextBox cntrl = (TextBox)cntrl; 
      cntrl.Text = "";    
     }    
     else if (cntrl.GetType() == typeof(ComboBox)) 
     { 
      ComboBox cntrl = (ComboBox)cntrl; 
      cntrl.SelectedIndex = -1; 
     } 
     else 
     { 
      foreach (Control subCntrl in _cntrl.Controls) 
      { 
       clrCntrls(subCntrl); 
      } 
     } 

она отлично работает для меня в окнах, но то же самое, как я могу сделать в WPF. Я немного замешана. Пожалуйста, помогите с этим.

+3

Чего вы хотите достичь? – Cherry

+0

Я хочу очистить данные в элементах управления – Pallavi

ответ

2

Вы можете попробовать использовать VisualTreeHelper, но он будет работать только для элементов управления, которые в настоящее время находятся в визуальном дереве, то есть визуализированы. Если у вас есть TabControl, вы не получите доступ к элементам управления на TabItem, которые не выбраны на данный момент.

Вот быстрая попытка на него:

private void ClearControls(DependencyObject root) 
{ 
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(root); i++) 
    { 
     var control = VisualTreeHelper.GetChild(root, i); 

     if (control is TextBox) 
     { 
      (control as TextBox).Text = String.Empty; 
     } 
     else if (control is ComboBox) 
     { 
      (control as ComboBox).Text = String.Empty; 
     } 
     else if (VisualTreeHelper.GetChildrenCount(control) > 0) 
     { 
      ClearControls(control); 
     } 
    } 
} 

Мое предложение было бы воспользоваться шаблон MVVM вместо этого. В этом случае у вас будет содержимое управления, связанное с свойствами в классе модели представления. Чтобы очистить все элементы управления в этом случае, вам нужно будет только заменить DataContext новым экземпляром класса модели представления. Обратите внимание на ответ HighCore.

+0

Что здесь является корнем – Pallavi

+1

@Pallavi Важно отметить, что этот подход имеет ** ВСЕ СОРТИРОВКИ ПРОБЛЕМ ** из-за «Виртуализации пользовательских интерфейсов» и модели содержимого WPF и того, как TabControl создает и уничтожает элементы пользовательского интерфейса динамически, а Visual vs. Логические деревья. НЕ используйте этот подход. WPF не является winforms, см. Мой ответ. –

+0

что здесь корень. tabitem – Pallavi

4

Я famliar с окна формы, теперь я собираюсь начать WPF

Отлично. Добро пожаловать в светлую сторону.

Первое, что вам нужно сделать, это полностью забыть все, что вы узнали в winforms, и понять и принять The WPF Mentality.

в WinForms я сбросить управления со следующим рекурсивным методом

в WPF, вы не «сброс управления», вы на самом деле не делать с контролем, просто потому, что UI is Not Data.

Что вы делаете вместо этого, чтобы декларативно DataBind ваш пользовательский интерфейс к соответствующему Модель данных или ViewModel и манипулировать, что вместо этого.

Поэтому, скажем, определить некоторые данные, такие как:

public class Person 
{ 
    public string FirstName {get;set;} 

    public string LastName {get;set;} 
} 

, а затем вы определяете (В XAML) части пользовательского интерфейса, чтобы показать, что данные:

<StackPanel> 
     <TextBlock Text="{Binding LastName}"/> 
     <TextBlock Text="{Binding FirstName}"/> 
    </StackPanel> 

Что вы делаете для того, для «очистки» этих TextBoxes следует назначить их DataContext новому, ясному экземпляру вашего класса данных:

DataContext = new Person();

Предлагаю вам начать чтение ссылки MF.

Удачи.

+2

+1 отлично писать.Я уверен, что @HighCore не захотел загромождать ответ, потому что в WPF есть много возможностей для покрытия, но для привязки для ответа не забудьте для класса, в этом примере «Лицо», реализовать INotifyPropertyChanged и повысить событие PropertyChanged для свойств, которые используются в привязках XAML. –

+2

@ Денисморозов прав. В WPF гораздо больше, чем в этом, но все ссылки, которые я опубликовал, должны начать OP. –

Смежные вопросы