Как я могу получить доступ к элементу управления пользователя по идентификатору (имя, Uid ...)? - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть несколько (пока 16) экземпляров пользовательских элементов управления, которые я создал.Каждый из них имеет похожие свойства.Каждому я дал имя: x: Name = "probeX" (где X - целое число).Каждый из этих элементов управления представляет собой электрический зонд.

Я хочу написать метод, который может получить доступ к пользовательскому элементу управления с помощью переданного значения int, к одному из его свойств.

Например: Если методыподпись: void SetMeasuredValueToProbe (int probe_number, int value), затем передача SetMeasuredValueToProbe (3, 22);

установит конкретное свойство probe3 на значение 22.

Я знаю, что могу простосделать длинный случай переключения внутри метода.Но в будущем я хотел бы экспоненциально увеличить количество зондов.Поэтому я хотел бы знать, как правильно назвать и получить доступ к массиву пользовательских элементов управления.

XAML:

    <StackPanel
        Grid.Column="0">
        <uc:ProbeTestControl x:Name="probe1" x:Uid="1" ProbeValue ="1"/>
        <uc:ProbeTestControl x:Name="probe2" ProbeValue ="2"/>
        <uc:ProbeTestControl x:Name="probe3" ProbeValue ="3"/>
        <uc:ProbeTestControl x:Name="probe4" ProbeValue ="4"/>
        <uc:ProbeTestControl x:Name="probe5" ProbeValue ="5"/>
        <uc:ProbeTestControl x:Name="probe6" ProbeValue ="6"/>
        <uc:ProbeTestControl x:Name="probe7" ProbeValue ="7"/>
        <uc:ProbeTestControl x:Name="probe8" ProbeValue ="8"/>
    </StackPanel>
    <StackPanel
        Grid.Column="1">
        <uc:ProbeTestControl x:Name="probe9" ProbeValue ="9"/>
        <uc:ProbeTestControl x:Name="probe10" ProbeValue ="10"/>
        <uc:ProbeTestControl x:Name="probe11" ProbeValue ="11"/>
        <uc:ProbeTestControl x:Name="probe12" ProbeValue ="12"/>
        <uc:ProbeTestControl x:Name="probe13" ProbeValue ="13"/>
        <uc:ProbeTestControl x:Name="probe14" ProbeValue ="14"/>
        <uc:ProbeTestControl x:Name="probe15" ProbeValue ="15"/>
        <uc:ProbeTestControl x:Name="probe16" ProbeValue ="16"/>
    </StackPanel>

в классе MainWindow:

    private void SetMeasuredValueToProbe(int probe_number, int value )
    {
        switch (probe_number)
        {
            case 1:
                probe1.MeasuredValueBox = value;
                break;
            case 2:
                probe2.MeasuredValueBox = value;
                break;
            default:
                break;                       
        }             
    }

Я хочу знать элегантный способ сделать это, не создавая код спагетти.

...