ItemsSource
에서 ListView
으로 사용되는 항목 개체 중 List<>
을 작성했습니다. 내 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를 사용하여 뷰 모델을 이미 시도했지만 작동하도록 만들지 못했습니다. 아마도 "BindingContext"가 될 수 있습니다. 또한 뷰 모델에서 하나의 변수를 사용하면 모든 목록 항목에 영향을 미칠 것이라고 생각했습니다. – Aphire
** ViewModel **에서는 ObservableCollection <무언가>를 만들거나 각 필드에 대해 'get'과'set' 속성을 구현해야하며 OnPropertyChanged (""); –
Enrico
제 편집문을 보아주세요, 제가 방금 조금 더 나은 것을 설명 할 수 있다고 생각합니다. – Aphire