在 Xamarin 中绑定文本颜色

BInding textColor in Xamarin

在 Xamarin 应用程序中,我试图在消息模型中将文本颜色与 属性 绑定。

public class Message : INotifyPropertyChanged
{
    public string text { get; set; }
    public Color color { get; set; }
    public event PropertyChangedEventHandler PropertyChanged;
}

任务是,当我单击集合视图中的标签时,文本应变为灰色。

我可以更改 ObservableCollection 中的颜色: this.messages = new ObservableCollection(); (这是可行的,如果我删除 ObservableCollection 中的条目,屏幕会更新)

但是当我在消息模型中更改颜色时,屏幕没有更新。

我使用 MVVMhelpers,如果可能的话,我想用它来解决问题。

最好的问候..

您可以在单击项目时将项目颜色更改为灰色以触发 CollectionViewSelectionChanged 事件。

Xaml:

   <CollectionView ItemsSource="{Binding messages}" SelectionMode="Single" SelectionChanged="CollectionView_SelectionChanged">
        <CollectionView.ItemTemplate>
            <DataTemplate>
                <Label Text="{Binding text}" TextColor="{Binding color}"></Label>
            </DataTemplate>
        </CollectionView.ItemTemplate>
        </CollectionView>    

后面的代码:

 public partial class Page2 : ContentPage
{
    public ObservableCollection<Message> messages { get; set; }
    public Page2()
    {
        InitializeComponent();
        messages = new ObservableCollection<Message>()
        {
            new Message(){ text="A", color="Red"},
            new Message(){ text="B", color="Red"},
            new Message(){ text="C", color="Red"},

        };
        this.BindingContext = this;

    }

    private void CollectionView_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var previousItem = e.PreviousSelection.FirstOrDefault() as Message;
        var currentItem = e.CurrentSelection.FirstOrDefault() as Message;
        currentItem.color = "Gray";

        if (previousItem!=null)
        {
            previousItem.color = "Red";
        }
    }
}
public class Message : INotifyPropertyChanged
{
    private string _text;
    public string text
    {
        get
        {
            return _text;
        }
        set
        {
            _text = value;
            OnPropertyChanged("text");
        }
    }
    private string _color;
    public string color
    {
        get
        {
            return _color;
        }
        set
        {
            _color = value;
            OnPropertyChanged("color");
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

太棒了,非常感谢。

我还要补充

<DataTemplate x:DataType="{x:Type Models:Message}">