инициализировать WPF с неопределенным типом данных - PullRequest
0 голосов
/ 14 мая 2019

Вот класс с неопределенной переменной, который необходимо передать в окно WPF.

 public class SelectedVal<T>
{        
    public T val {get;set;}       
}

Окно:

public partial class SOMEDialogue : Window
{
   public List<SelectedVal<T>> returnlist { get { return FullList; } }
   public List<SelectedVal<T>> FullList = new List<SelectedVal<T>>();       

   public SOMEDialogue (List<SelectedVal<T>> inputVal)
    {
       InitializeComponent();
     }

 }

Итак, вот вопрос, как я могу сделать это правильно, чтобы получить T и установить глобальную переменную в моем WPF?

Отредактировано (код также отредактирован):

Назначение WPF:

  • Список SelectedVal<T> ввод
  • Показать этот вход в этом WPF
  • Зависит от типа T, пользователь может что-то сделать с этим вводом
  • По окончании возврата List<SelectedVal<T>> returnlist может быть доступ

1 Ответ

2 голосов
/ 14 мая 2019

Это основная идея, которую я описываю.Дайте мне знать, если вы попали в какие-нибудь препятствия.Я предполагаю, что текст поиска и значения min / max int являются свойствами диалога в целом.Я также предполагаю, что в коллекции может быть смесь типов предметов, что может быть слишком большим предположением.Вы можете это уточнить?

Выбранные классы значений

public interface ISelectedVal
{
    Object Val { get; set; }
}
public class SelectedVal<T> : ISelectedVal
{
    public T Val { get; set; }

    object ISelectedVal.Val
    {
        get => this.Val;
        set => this.Val = (T)value;
    }
}
public class StringVal : SelectedVal<String>
{
}
public class IntVal : SelectedVal<int>
{
}

Диалоговая модель просмотра

public class SomeDialogViewModel : ViewModelBase
{
    public SomeDialogViewModel(List<ISelectedVal> values)
    {
        FullList = values;
    }

    public List<ISelectedVal> FullList { get; set; }

    private String _searchText = default(String);
    public String SearchText
    {
        get { return _searchText; }
        set
        {
            if (value != _searchText)
            {
                _searchText = value;
                OnPropertyChanged();
            }
        }
    }

    private int _minInt = default(int);
    public int MinInt
    {
        get { return _minInt; }
        set
        {
            if (value != _minInt)
            {
                _minInt = value;
                OnPropertyChanged();
            }
        }
    }

    private int _maxInt = default(int);
    public int MaxInt
    {
        get { return _maxInt; }
        set
        {
            if (value != _maxInt)
            {
                _maxInt = value;
                OnPropertyChanged();
            }
        }
    }
}

.xaml.cs

public SOMEDialogue (List<ISelectedVal> inputValues)
{
    InitializeComponent();
    DataContext = new SomeDialogViewModel(inputValues);
}

XAML

<Window.Resources>
    <DataTemplate DataType="{x:Type local:StringVal}">
        <StackPanel>
            <Label>Value</Label>
            <Label Content="{Binding Val}" />
            <Label>Search text:</Label>

            <TextBox Text="{Binding DataContext.SearchText, RelativeSource={RelativeSource AncestorType=Window}}" />
            <!-- Other stuff -->
        </StackPanel>
    </DataTemplate>
    <DataTemplate DataType="{x:Type local:IntVal}">
        <StackPanel>
            <Label>Value</Label>
            <Label Content="{Binding Val}" />
            <Label>Min value:</Label>
            <TextBox Text="{Binding DataContext.MinIntVal, RelativeSource={RelativeSource AncestorType=Window}}" />
            <Label>Max value:</Label>
            <TextBox Text="{Binding DataContext.MaxIntVal, RelativeSource={RelativeSource AncestorType=Window}}" />
            <!-- Other stuff -->
        </StackPanel>
    </DataTemplate>
</Window.Resources>
<Grid>
    <ItemsControl
        ItemsSource="{Binding FullList}"
        />
</Grid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...