0
我已經構建了List<>
的項目對象,它們被用作ItemsSource
到ListView
。在我的ListView的ItemSelected
事件中,我試圖更改該特定項目的其中一個元素。原始值是從對象中綁定的。點擊更改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嘗試了一個viewmodel,但是我無法讓它工作,這可能是下面的「BindingContext」。我還認爲,通過在視圖模型中使用一個變量,它會影響所有列表項? – Aphire
在您的** ViewModel **中,您必須創建一個'ObservableCollection'或者爲每個字段實現一個帶有'get'和'set'的屬性並且在集合中使用'OnPropertyChanged(「」);' –
Enrico
請參閱我的編輯,我認爲這可能解釋我剛剛說的略好 – Aphire