У меня проблемы с копированием данных из одной ObservableCollection в другую. У меня есть API-вызов GetItemsAsync из http, который помещает ответ в модель с именем ShipList.cs. Внутри ShipList.cs есть корабли ShipCatalog []. Я создал вторую модель под названием HangarList.cs с ангарами HangarCatalog []. У меня есть страница, которая отображает основной список кораблей (ShipsList). Я хочу, чтобы пользователь выбрал корабль (ShipList.name привязан к этому конкретному ListVIew. Я пытался использовать .Where () для фильтрации ShipList только для совпадения свыделенный элемент и скопировать эти данные в HangarCatalog. Я получаю Невозможно преобразовать GallogForms.Api.ShipCatalog в GallogForms.Api.HangarCatalog, используя следующий код: ViewModel
private ShipCatalog _selectedShip;
public ShipCatalog SelectedShip
{
get {return _selectedShip; }
set
{if (_selectedShip != value)
_selectedShip = value;
id = _selectedShip.id;
CopyShipData();
private async void CopyShipData()
{
var _container = Items.Where(s =>
s.name.FirstOrDefault().ToString() == id.ToString()).ToList();
foreach (var item in _container.Where(s =>
s.name.FirstOrDefault().ToString() == id.ToString()).ToList())
// var items = await _gallogClient.GetItemsAsync<ShipList>();
// foreach (var item in items.ships.Where(s =>
// s.name.FirstOrDefault().ToString() == id.ToString()).ToList())
{
Hangars.Clear();
Hangars.Add(item);
}
}
Я еще не нашел ответа,и я много читал, это может помочь в моей ситуации. myShipsList связан с новой моделью, которую я создал в API, которая идеально отражает ShipCatalog [].
Я также продолжаю сталкиваться с ответами, которые предлагаютListViewItem.Item или, в моем случае, AddedShipView.Items .Items не является опцией для моих ListViews в модели представления.
AddShipPage.xaml
<StackLayout Orientation="Vertical">
<SearchBar x:Name="HangarListView" Text="Add To Your Fleet!"
TextChanged="HangarList_TextChanged"
BackgroundColor="Azure"
/>
<Grid>
<ListView x:Name="SuggestedShipView"
ItemsSource="{Binding Items}"
SelectedItem="{Binding selectedShip}"
BackgroundColor="Silver">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
.....................
ShipList.cs (API Query)
[ApiPath("ships")]
public class ShipList : ApiQueryable
{
public ShipCatalog[] ships { get; set; }
}
public class ShipCatalog : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
handler?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public int id { get; set; }
public string name { get; set; }
public string uri { get; set; }
public int rsi_id { get; set; }
public string img { get; set; }
public string mfr { get; set; }
public string flyable { get; set; }
public string scu { get; set; }
public string value { get; set; }
public string bgcolor { get; set; }
public string color { get; set; }
public string role { get; set; }
public bool _isVisible { get; set; }
public bool IsVisible
{
get { return _isVisible; }
set
{
if (_isVisible != value)
{
_isVisible = value;
OnPropertyChanged();
}
}
}
}
}
HangarList отлично отражает ShipList, за исключением того, что он называется HangarList, общедоступный ангарный каталог [] ангаров
And Finсоюзник, запрос, который заполняет ShipCatalog [] AddShipViewModel
Items.Clear();
var items = await _gallogClient.GetItemsAsync<ShipList>();
foreach (var item in items.ships.ToList())
{
Items.Add(item);
}
Нет сообщений об ошибках как таковых, но я не смог структурировать метод для выполнения этой задачи. Если вы хотите увидеть весь проект, чтобы увидеть больше того, что я делаю, http://github.com/dreamsforgotten/GallogMobile