UWP C #, можно ли ссылаться на одну переменную для различных типов управления? - PullRequest
0 голосов
/ 26 ноября 2018
var _textbox;
if (datatype == "STRING") {
  _textbox = new TextBox();
  _textbox.Text = "text";
}
else if (dataype == "ACTOR") {
  _textbox = new AutoSuggestBox();
}

_textbox.Tag = "custom tag name";
grid.Children.Add(_textbox);
Grid.SetRow(_textbox, row);

Я не хочу повторять один и тот же код для всех типов элементов управления (установка тега и добавление дочернего элемента в сетку).Есть ли способ для этого?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Да, просто сделайте это:

Control _textbox = null;
if (datatype == "STRING")
{
    _textbox = new TextBox();
    _textbox.Text = "text";
}
else if (dataype == "ACTOR")
{
    _textbox = new AutoSuggestBox();
}

if (_textbox != null)
{
    _textbox.Tag = "custom tag name";
    grid.Children.Add(_textbox);
    Grid.SetRow(_textbox, row);
}
0 голосов
/ 26 ноября 2018

Вы можете попытаться использовать метод извлечения, чтобы избежать дублирования кода.

Если вы используете children, это может быть UIElementCollection , который add метод должен передать System.Windows.UIElement класс.

Control _textbox = GetTextBox();
_textbox.Tag = "custom tag name";

grid.Children.Add(_textbox);
Grid.SetRow(_textbox, row);


public Control GetControl(){
    Control _textbox;
    if (condition1) {
      _textbox = GetTextBox();
    }
    else if (condition2) {
      _textbox = new AutoSuggestBox();
    }
    return _textbox;
}

public TextBox GetTextBox(){
    TextBox _textbox = new TextBox();
    _textbox.Text = "text";
    return _textbox;
}

Или вы можете попробовать использовать. Я видел, как вы редактировали свой вопрос, вы можете попробовать использовать Dictionary в качестве таблицы сопоставления, а затем использовать TryGetValue, чтобы сделать это.

Dictionary<string, Control> dict = new Dictionary<string, Control>();
dict.Add("STRING", new TextBox() { Text = "text" });
dict.Add("ACTOR", new AutoSuggestBox());

Control _textbox;
if (dict.TryGetValue(datatype, out _textbox))
{
    _textbox.Tag = "custom tag name";
    grid.Children.Add(_textbox);
    Grid.SetRow(_textbox, row);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...