从不同对象的OnTouchAction更新字符串

时间:2018-12-03 16:42:52

标签: c# xamarin.forms binding touch effect

我有一个从BoxView派生的对象类。该对象已附加TouchEffect,并且在OnTouchAction启动时,我更改了对象的属性。

我还想根据标签绑定到的字符串附带的文本来更改标签的属性。

我所做的是创建一个包含可绑定字符串和标签的页面实例,然后,我尝试通过在OnTouchAction方法内的代码中引用它来更改字符串的值。

我没有收到错误,并且断点告诉我代码已到达该行,但是标签未更新。

我正在尝试从与字符串不同的类中更新字符串。

这里有人可以帮助我吗?

class Element : BoxView
{
    List<long> ids = new List<long>();
    MainPage mainPage = new MainPage();

    public event EventHandler StatusChanged;

    public Element()
    {
        TouchEffect effect = new TouchEffect();
        effect.TouchAction += OnTouchEffectAction;
        Effects.Add(effect);
    }

    public Color DefaultColor { set; get; }

    public Color HighlightColor { set; get; }

    public bool IsPressed { private set; get; }

    void OnTouchEffectAction(object sender, TouchActionEventArgs args)
    {
        switch (args.Type)
        {
            case TouchActionType.Pressed:
                AddToList(args.Id);
                mainPage.LeftLabelText = "entered";
                break;

            case TouchActionType.Entered:
                if (args.IsInContact)
                {
                    AddToList(args.Id);
                    mainPage.LeftLabelText = "entered";
                }
                break;

            case TouchActionType.Moved:
                break;

            case TouchActionType.Released:
            case TouchActionType.Exited:
                RemoveFromList(args.Id);

                break;
        }
    }

    void AddToList(long id)
    {
        if (!ids.Contains(id))
        {
            ids.Add(id);
        }

        CheckList();
    }

    void RemoveFromList(long id)
    {
        if (ids.Contains(id))
        {
            ids.Remove(id);
        }

        CheckList();
    }

    void CheckList()
    {
        if (IsPressed != ids.Count > 0)
        {
            IsPressed = ids.Count > 0;
            Color = IsPressed ? HighlightColor : DefaultColor;
            mainPage.LeftLabelText = "entered";
            StatusChanged?.Invoke(this, EventArgs.Empty);
        }
    }
}

和MainPage相关代码:

Element element = new Element();
                            element.HighlightColor = Color.Accent;
                            element.DefaultColor = Color.Transparent;
                            element.Color = bar.DefaultColor;
                            element.HeightRequest = sGrid.Height;    
                            element.VerticalOptions = LayoutOptions.End;

(...) // adding element view to the grid.

字符串:

public string _leftLabelText = "testing";
    public string LeftLabelText
    {
        get => _leftLabelText;
        set
        {
            _leftLabelText = value;
            NotifyPropertyChanged("LeftLabelText");
        }
    }

 #region INotifyPropertyChanged
    public event PropertyChangedEventHandler PropertyChanged2;
    protected void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
    {
        PropertyChanged2?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    #endregion



<Label x:Name="leftLabel" x:FieldModifier="public" Text="{Binding LeftLabelText, Mode=TwoWay}" TextColor="Black" FontSize="10" HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand"/>

0 个答案:

没有答案