我是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;
}
}
答案 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属性