iOSについては、Xamarinフォームの行のサイズを変更する際に問題が発生します。私のコードはAndroidでも完璧に動作します。サイズを大きくしてiOSの行のサイズを変更すると、下の行が重なります。これは私を与えるグーグルでは、このような結果:http://forums.xamarin.com/discussion/comment/67627/#Comment_67627XamarinフォームのiOSのリスト行のサイズを自動的に変更します。
結果はXamarinフォームが原因のパフォーマンスの問題にこれを実装していないと主張しています。私は1歳以上の結果しか見つけられないので、まだこれが理由であるかどうかはわかりません。
は、私が発見した別のスレッドでこれを解決するために、いくつかの異なる方法を見つけることだが、すべては非常に複雑です。
私の場合、アイテムの選択時にアイテムが展開されることは、アプリではよくあることです。私はここに誰かがこれを解決する解決策を提案できるかどうか疑問に思っていた?可能であれば、正確な高さを何度も再計算することを避けたいと思っています。 Xamarin.iOSと依存関係注入を使用してカスタムリストを注入すべきですか?
私はここに私のXAMLを投稿しますが、それは、Android上でうまく働いているので、XAMLはおそらく問題ではありません。
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="simpletest.PlayGroundPage">
<ContentPage.Content>
<StackLayout>
<ListView VerticalOptions="FillAndExpand" HasUnevenRows="True" SeparatorVisibility="None" ItemsSource="{Binding AllItems}" SelectedItem="{Binding MySelectedItem}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout VerticalOptions="FillAndExpand">
<Label Text="{Binding MyText}" />
<Button Text="button1" IsVisible="{Binding IsExtraControlsVisible}" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage.Content>
</ContentPage>
フォームプロジェクトのための私のパッケージ:ここ
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="FreshEssentials" version="2.0.1" targetFramework="portable-net45+win+wp80+MonoTouch10+MonoAndroid10+xamarinmac20+xamarintvos10+xamarinwatchos10+xamarinios10" />
<package id="Xamarin.Forms" version="2.3.1.114" targetFramework="portable-net45+win+wp80+MonoTouch10+MonoAndroid10+xamarinmac20+xamarintvos10+xamarinwatchos10+xamarinios10" />
</packages>
は私のviewmodelです。
public class PlayGroundViewModel : INotifyPropertyChanged
{
private Item _mySelectedItem;
private ObservableCollection<Item> _allItems;
public PlayGroundViewModel(ObservableCollection<Item> allItems)
{
AllItems = allItems;
MySelectedItem = allItems.First();
ItemClicked = (obj) => { ExpandRow(obj); };
}
public ObservableCollection<Item> AllItems { get { return _allItems; } set { _allItems = value; SetChangedProperty("AllItems"); } }
public Action<Item> ItemClicked { get; private set; }
public Item MySelectedItem
{
get { return _mySelectedItem; }
set { _mySelectedItem = value; SetChangedProperty("MySelectedItem"); }
}
private void ExpandRow(Item item)
{
foreach (Item x in AllItems)
{
x.IsExtraControlsVisible = false;
}
if (item != null)
{
item.IsExtraControlsVisible = true;
}
SetChangedProperty("MySelectedItem");
SetChangedProperty("AllItems");
}
public event PropertyChangedEventHandler PropertyChanged;
private void SetChangedProperty(string property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
}
分離コード:
public PlayGroundPage()
{
InitializeComponent();
ObservableCollection<Item> items = new ObservableCollection<Item>();
items.Add(new Item("One"));
items.Add(new Item("Two"));
items.Add(new Item("Three"));
PlayGroundViewModel viewModel = new PlayGroundViewModel(items);
BindingContext = viewModel;
Action<Item> itemClickedAction = viewModel.ItemClicked;
ItemList.ItemTapped += (object sender, ItemTappedEventArgs e) =>
{
Item item = (Item)e.Item;
itemClickedAction.Invoke(item);
};
}
}
アイテム:
public class Item : INotifyPropertyChanged
{
public Item(string text)
{
_myText = text;
_isExtraControlsVisible = false;
}
private string _myText;
private bool _isExtraControlsVisible;
public event PropertyChangedEventHandler PropertyChanged;
public string MyText
{
get { return _myText; }
set { _myText = value; OnPropertyChanged("MyText"); }
}
public bool IsExtraControlsVisible
{
get { return _isExtraControlsVisible; }
set { _isExtraControlsVisible = value; OnPropertyChanged("IsExtraControlsVisible"); }
}
private void OnPropertyChanged(string property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
}
私は、リストビューの下の2枚の写真を投稿します。最初の画像はクリックされません。 2番目の画像は「2」をクリックした後です。セル内にボタンが表示されますが、セルは下のセル(「3」)と重なります。
使用しているバージョンによっては、セルに 'ForceUpdateSize'があります。この関数は私のバージョンでは何もしませんが、他の人はそれが動作すると言っています。 – Taekahn
私はそれを試してみたいですが、私はViewModelから完全に分離したXAMLを訴えており、GUIを直接操作しないようにしたいと考えています。 C#で実際のリストを参照せずにこれを起動できますか? –