Установить данные выбора на основе другого выбора на экране - PullRequest
0 голосов
/ 10 октября 2019

В моем приложении есть экран, который позволяет администраторам редактировать / создавать пользователей. На этом экране есть информация, которую я установил, если пользователь существует, путем переопределения метода OnAppearing().

        EmployeeFull fullEmployee = new EmployeeFull();
        fullEmployee.Employee = _employee;
        fullEmployee.Locations = await _clientBl.GetLocations();

        fullEmployee.SelectedLocationIndex = fullEmployee.Locations.FindIndex(x => x.LocationID == _employee.LocationID);

        BindingContext = fullEmployee;

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

XAML-код для двух средств выбора:

    <!--Location-->
    <Picker ItemDisplayBinding ="{Binding Name}"
            Title="-Select a Location-"
            x:Name="location_picker"
            ItemsSource="{Binding Locations}"
            SelectedIndex="{Binding SelectedLocationIndex}"
            SelectedIndexChanged="Location_picker_SelectedIndexChanged"></Picker>

    <!--SiteLocation (Populated from location choice)-->
    <Picker Title="-Select a Site-"
            x:Name="site_picker"></Picker>

Когда пользователь выбирает значение из первогосборщик, метод onchange применяется в .cs, однако я не знаю, как установить информацию во втором сборщике на основе этого.

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

РЕДАКТИРОВАТЬ: Предпочтительный способ настроить второй сборщик будет очень похож на первый. У меня есть selectedSitelocationIndex целое число, которое я бы установил, используя siteLocationID против пользователя. Затем я хотел бы заполнить второй сборщик всеми местоположениями сайта относительно выбранного местоположения в первом сборщике.

1 Ответ

1 голос
/ 10 октября 2019

Да, вы можете установить его. Есть 2 способа сделать это:

1.Привязать ItemsSource в XAML

2.Вставить ItemsSource в CodeBehind

1-й способ:

Я бы предложил вам создать отдельную ViewModel в соответствии с MVVM.

Назовите его FullEmployeeViewModel.cs

public class FullEmployeeViewModel : INotifyPropertyChanged
{

    #region INotifyPropertyChanged implementation
    protected void RaisePropertyChanged([CallerMemberName]  string propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    public event PropertyChangedEventHandler PropertyChanged;
    #endregion

    public bool _selectedLocationIndex { get; set; }
    public bool _employee { get; set; }
    public string _locations { get; set; }
    public string _secondPickerItemsSource { get; set; }
    #region properties



    public bool SelectedLocationIndex
    {
        get { return _selectedLocationIndex; }
        set 
        { 
            _selectedLocationIndex = value;
            RaisePropertyChanged();
        }
    }

    public bool Employee
    {
        get { return _employee; }
        set { _employee = value; RaisePropertyChanged(); }
    }
    public string Locations
    {
        get { return _locations; }
        set { _locations = value; RaisePropertyChanged(); }
    }
     public string SecondPickerItemsSource
    {
        get { return _secondPickerItemsSource; }
        set { _secondPickerItemsSource = value; RaisePropertyChanged(); }
    }
    #endregion


    public FullEmployeeViewModel()
    {
        Employee = _employee;
        Locations = await _clientBl.GetLocations();
        SelectedLocationIndex = fullEmployee.Locations.FindIndex(x => x.LocationID == _employee.LocationID);
    }


}

Теперь часть XAML

<Picker ItemDisplayBinding ="{Binding Name}"
        Title="-Select a Location-"
        x:Name="location_picker"
        ItemsSource="{Binding Locations}"
        SelectedIndex="{Binding SelectedLocationIndex}"
        SelectedIndexChanged="Location_picker_SelectedIndexChanged"></Picker>

<!--SiteLocation (Populated from location choice)-->
<Picker Title="-Select a Site-"
        x:Name="site_picker" ItemsSource="{Binding SecondPickerItemsSource}"></Picker>

В вашем OnAppearing()

FullEmployeeViewModel  vm = new FullEmployeeViewModel ();
BindingContext = vm;

/**
You have select first item
**/

vm.SecondPickerItemsSource = //put your list here

2-й способ:

async void OnPickerSelectedIndexChanged(object sender, EventArgs e)
        {
                site_picker.ItemsSource = "your list";

            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...