ItemsSource
〜ListView
として使用されているアイテムオブジェクトのList<>
を作成しました。 ListViewのItemSelected
イベントで、その特定の項目の要素の1つを変更しようとしています。元の値はオブジェクトからバインドされています。クリック時のViewCell要素の変更
itemClass.cs
class itemClass
{
public itemClass()
{
}
public string valueIWantToChange {get; set;}
}
MyPage.cs
public MyPage()
{
InitializeComponent();
List<itemClass> listOfItems= new List<itemClass>();
itemClass item1= new itemClass { valueIWantToChange = "UnClicked"};
listOfItems.Add(item1);
BindingContext = this;
lstView.ItemsSource = listOfItems;
lstView.ItemSelected += (sender, e) =>
{
if (e.SelectedItem == null)
{
return;
}
// The below does nothing but highlights what I am trying to achieve
((itemClass)((ListView)sender).SelectedItem).valueIWantToChange = "Clicked" ;
((ListView)sender).SelectedItem = null;
};
}
私の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"
xmlns:myProject="clr-namespace:myProject"
x:Class="myProject.MyPage">
<StackLayout>
<ListView x:Name="lstView">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Padding="0" Orientation="Vertical" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
<Label Text="{Binding valueIWantToChange }" TextColor="Black" FontSize="16" VerticalOptions="Center" HorizontalOptions="Center" Margin="5,5,5,5"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>
私はバインドコマンドとPropertyChangedEventHandler
を使用しようとしましたが、成功しませんでした。これに対する援助は非常に感謝しています。
私はアプリ内の他の場所で、同様の方法でPropertyChangedEventHandlersを使用しようとしました
編集、下記を参照してください。
public double FontXLarge
{
set
{
someFontsize = value;
OnPropertyChanged("FontXLarge");
}
get
{
someFontsize = scalableFont(10);
return someFontsize;
}
}
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
を上記のようにフォントサイズをバインドするために私を可能にしかし、もし私が文字列に似たようなものを使用していたとしても、それはListViewのすべての項目に影響しませんか?
お返事ありがとうございました。私は実際にPropertyChangedEventHandlerでビューモデルを試しましたが、動作させることができませんでした。これはおそらく "BindingContext"になる可能性があります。私はまた、ビューモデルに1つの変数を持たせることで、すべてのリスト項目に影響を与えると考えましたか? – Aphire
** ViewModel **ではObservableCollectionを作成するか、各フィールドに対して 'get'と' set'を持つプロパティを実装し、 'OnPropertyChanged(" ");' –
Enrico
私の編集を参照してください、私はちょうどちょっと言ったものを説明するかもしれないと思います – Aphire