单击时更改ViewCell元素

时间:2016-12-13 10:30:18

标签: c# android ios xamarin xamarin.forms

我已经构建了List<>个项目对象,这些对象被用作ItemsSourceListView。在我的ListView的ItemSelected事件中,我试图更改该特定项目的其中一个元素。原始值是从对象绑定的。

请考虑以下示例:

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>

我试图使用Binding命令和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));
    }

上面允许我将fontsize绑定到缩放字体,但是如果我要使用类似字符串的东西,它会不会影响ListView中的所有项目吗?

1 个答案:

答案 0 :(得分:1)

我认为实现您想要的最佳方式是将 ViewModel INotifyPropertyChanged一起使用。如果你正在谷歌搜索,你可以找到很多例子。通用基类的一个很好的链接是this

如果您找到所需的一切,请告诉我。