选择后如何更改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 属性 ]
我是 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 属性 ]