选择后如何更改masterPageitem的标签文本颜色

How to change Label Text color of masterPageitem after selection

我是 Xamarin 框架的新手,想使用主从页面创建应用 我从 xamarin websit 做了简单的 Master-Detail Navigation 页面演示 master-detail-page xamarin webise

唯一不同的是我在里面使用了 ViewCell DataTemplate.In ViewCell 我有 Label 而不是图像。 单击 MasterPageItems 后导航工作正常,但现在我想 更改标签文本颜色

      <ListView x:Name="listView" VerticalOptions="FillAndExpand" SeparatorVisibility="None" RowHeight="50" >
    <ListView.ItemTemplate>
      <DataTemplate>
        <ViewCell>
          <Label Text="{Binding Title}" TextColor="#1ca7ec" FontSize="18"></Label>
        </ViewCell>
      </DataTemplate>
    </ListView.ItemTemplate>
  </ListView>

void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        var item = e.SelectedItem as MasterPageItem; 
        if (item != null)
        {                
            Detail = new NavigationPage((Page)Activator.CreateInstance(typeof(ContactsPage)));
            masterPage.ListView.SelectedItem = null;
            IsPresented = false;
        }
    }

我觉得你可以这样做:

1- 在你的模型中你应该有一个 "TextColor" 属性 和一个 "Selected" 属性

public bool Selected { get; set; }

// I think you should not return "Color" type (for strong MVVM) but, for example, a value that you can convert in XAML with a IValueConverter...
public Color TextColor
{
    get
    {
        if (Selected)
            return Color.Black;
        else
            return Color.Green;
    }
}

2- 在你的 XAML 你应该有类似

的东西
<ListView SelectedItem="{Binding SelectedItem}" ItemsSource="{Binding List}">
    <ListView.ItemTemplate>
      <DataTemplate>
        <ViewCell>
          <Label Text="{Binding Name}" TextColor="{Binding TextColor}" FontSize="18"></Label>
        </ViewCell>
      </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

3- 在您的 ViewModel 中类似

MyModel _selectedItem { get; set; }
public ObservableCollection<MyModel> List { get; set; } = new ObservableCollection<MyModel>();

public MyModel SelectedItem
{
    get { return _selectedItem; }
    set
    {
        if (_selectedItem != null)
            _selectedItem.Selected = false;

        _selectedItem = value;

        if (_selectedItem != null)
            _selectedItem.Selected = true;
    }
}

当您在列表中的项目被选中时,SelectedItem 属性 更改并且模型中的 Selected 属性 变为 True 或 False,更改 TextColor 属性(我使用 PropertyChanged.Fody INPC).

希望对您有所帮助 您可以在 GitHub

上找到该存储库

我认为您也可以仅使用 Selected 属性 和将 Selected 属性 转换为颜色

的 IValueConverter,而不是在您的模型中使用 TextColor 属性 ]