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

时间:2017-03-18 09:25:18

标签: xamarin navigation master-detail

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

唯一的区别是我在DataTemplate中使用了ViewCell。在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 个答案:

答案 0 :(得分:0)

我认为你可以这样做:

1-在你的模特中你应该有一个&#34; TextColor&#34;财产和&#34;选择&#34;属性

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属性