Элемент ListView Xamarin FormsTapped к объекту из ViewModel - PullRequest
0 голосов
/ 18 марта 2020

У меня проблема. Я создал ListView с ItemSource из моей ViewModel. Теперь ItemSource - ObservableCollection<KnownDevice> с несколькими объектами с именем KnownDevice. В моем ListView я установил: ItemTapped="rowDevice_Clicked" со следующей функцией:

private void rowDevice_Clicked(object sender, ItemTappedEventArgs e)
{
    ListView listView= (ListView)sender;
}

Но теперь мне нужно знать, какой KnownDevice был нажат.

Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 18 марта 2020

добавьте эту строку кода в ваш rowDevice_Clicked

var device = e.Item as KnownDevice
0 голосов
/ 18 марта 2020

Вам нужно создать свойство selectedDevice и связать его с SelectedItem списка, ниже приведен мой код, надеюсь, он будет вам полезен.

ListView XAML:

<ListView HasUnevenRows="True" 
          ItemsSource="{Binding KnownDeviceItems}" 
          SelectedItem="{Binding SelectedKnownDevice}"
          SeparatorVisibility="None">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    //code here for cell
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

Свойства ViewModel :

private ObservableCollection<KnownDevice> knownDeviceItems;
    public ObservableCollection<KnownDevice> KnownDeviceItems
    {
        get { return knownDeviceItems; }
        set
        {
            knownDeviceItems = value;
            OnPropertyChanged();
        }
    }

    private KnownDevice selectedKnownDevice;
    public KnownDevice SelectedKnownDevice
    {
        get { return selectedKnownDevice; }
        set
        {
            selectedKnownDevice = value;
            OnPropertyChanged();
        }
    }

Спасибо

0 голосов
/ 18 марта 2020

просто создайте еще один экземпляр вашего KnownDevice

public ObservableCollection<KnownDevice> ThisIsMySelectionList {get; set;}
public KnownDevice ThisIsTheSelectedDeviceFromList {get; set;}

Затем, в вашем определении списка

<ListView 
   ItemsSource="{Binding ThisIsMySelectionList}"
   SelectedItem="{Binding ThisIsTheSelectedDeviceFromList}" >

   .. rest of your column definitions to show

</ListView>

Когда элемент выбран / выбран из списка, он привязан к publi c get / set «ThisIsTheSelectedDeviceFromList» как привязанное к значению SelectedItem

Я уверен, что есть другие, которые могут указывать на более прямой путь, но в вашем получателе / ​​установщике вы можете указать к объекту приложения самостоятельно, например

public KnownDevice ThisIsTheSelectedDeviceFromList 
{
   get { return ((YourNamespace.App)App).YourKnownDeviceProperty; }
   set {((YourNamespace.App)App).YourKnownDeviceProperty = value; }
}

Итак, здесь я принудительно устанавливаю тип для конкретно ВАШЕГО приложения, квалифицируя ваш проект namespace.app объекта приложения stati c, а затем ваше свойство. Вы можете получить и установить напрямую по мере необходимости.

...