C# Xamarin将ListView项目表单从ViewModel发送到对象

C# Xamarin将ListView项目表单从ViewModel发送到对象,c#,xamarin,xamarin.forms,xamarin.android,xamarin.ios,C#,Xamarin,Xamarin.forms,Xamarin.android,Xamarin.ios,我有个问题。我已使用ViewModel中的ItemSource创建了一个ListView。现在,ItemSource是一个可观察的集合,其中包含一些名为KnownDevice的对象。在我的列表视图中,我使用以下功能设置:itemtrapped=“rowDevice\u Clicked”: private void rowDevice_Clicked(object sender, ItemTappedEventArgs e) { ListView listView= (ListView)s

我有个问题。我已使用ViewModel中的ItemSource创建了一个ListView。现在,ItemSource是一个
可观察的集合
,其中包含一些名为
KnownDevice
的对象。在我的列表视图中,我使用以下功能设置:
itemtrapped=“rowDevice\u Clicked”

private void rowDevice_Clicked(object sender, ItemTappedEventArgs e)
{
    ListView listView= (ListView)sender;
}
但现在我需要知道点击了哪个KnownDevice


我该怎么做呢?

再举一个你的知识设备的例子

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

因此,在这里,我通过限定静态App对象的project namespace.App,然后是您的属性,强制对您的应用程序进行类型转换。您可以根据需要直接获取和设置。

在您单击的行设备中添加这行代码。

var device = e.Item as KnownDevice

您需要创建一个属性selectedDevice并将其绑定到listview的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();
        }
    }
私有可观察收集知识设备;
公众观察收集知识设备
{
获取{return knownDeviceItems;}
设置
{
knownDeviceItems=价值;
OnPropertyChanged();
}
}
私有知识设备选择知识设备;
公共知识设备选择知识设备
{
获取{return selectedKnownDevice;}
设置
{
selectedKnownDevice=值;
OnPropertyChanged();
}
}

谢谢

好的,但是如果我想将它绑定到例如
App.selectedDevice
with as type
KnownDevice
?@A.Vreeswijk,请参阅修订后的答案以指向绑定的其他对象。当我单击一行时,代码不会在下一行中碰到我的断点:
设置{((YourNamespace.App)App).YourKnownDeviceProperty=value;}
,因此所选设备保持为
null
。我做错了什么?@A.Vreeswijk,可能是您的绑定上下文。如果表单/屏幕/页面/其他任何组件都没有连接到MVVM(视图模型)的BindingContext,那么它将无法工作。。。您没有提供足够的其余绑定/数据上下文。请添加您的视图模型和应用程序。SelectedDevice您可以在这里查看您的问题@A.Vreeswijk。
e.Item
包含点击的项谢谢,这就是我要找的xD
<ListView HasUnevenRows="True" 
          ItemsSource="{Binding KnownDeviceItems}" 
          SelectedItem="{Binding SelectedKnownDevice}"
          SeparatorVisibility="None">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    //code here for cell
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
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();
        }
    }