繁体   English   中英

如何检测 xamarin UWP 应用程序中标签元素的文本值更改?

[英]how to detect text value change for label element in xamarin UWP application?

我需要一种方法来检测特定标签元素何时设置了文本值。 这在应用程序加载时以编程方式发生。 我查询共享点,并获取文件列表。 对于每个文件,我会显示它是否已签出。

如果该文件被检出,那么我想在本地计算机中搜索一个自定义令牌文件,以确定它是否是当前用户检出的。 如果我在本地计算机上找到特定文件的相应标记,我想将当前显示的文本/图标的颜色更改为红色。

问题

此时,文件的初始列表正确显示,并且......当 DriveItem.Publication.Level 检出时显示特定图标的逻辑工作正常。 但是在我尝试检测何时设置结帐图标的新事件处理程序中,我不知道如何:a) 仅检查对特定标签的更改。 b) 获取关联文件的名称(另一个标签元素) c) 以编程方式更改图标的颜色。

到目前为止,我有以下代码:

XAML

根据我的研究,我知道由于标签没有 textchanged 事件,我必须为整个类添加一个事件处理程序。 注意下面的“PropertyChanged="SPDocumentLibraryContentsChanged”:

 <?xml version="1.0" encoding="utf-8" ?>
 <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:local="clr-namespace:GraphTutorial.Models"

     Title="Shared Document Library"
     x:Class="GraphTutorial.SPDocumentLibraryContentsPage"
         PropertyChanged="SPDocumentLibraryContentsChanged">

后来我有以下元素。 这是我需要评估和更改颜色的结帐状态,如果它设置为“结帐”

 <Label Grid.Column="0" Text="{Binding Path=DriveItem.Name}" FontSize="Small" />
 <Label Grid.Column="1" x:Name="CheckoutStatus" Text="{Binding Path=DriveItem.Publication.Level,Converter={StaticResource IconValueConverter}}" FontFamily="Segoe MDL2 Assets" FontSize="Small"/>

客户服务代码

这就是我的问题所在。 首先,我似乎无法捕获正确的属性名称。 我试过了

  • DriveItem.Publication.Level
  • 等级

但两者似乎都不起作用。

    private void SPDocumentLibraryContentsChanged(object sender, PropertyChangedEventArgs e)
    {
        if (e.PropertyName == "Level")
        {
            Console.WriteLine(sender);
            Console.Write(e);
        }

我试图遵循的示例是: 标签文本更改时处理事件

任何提示将不胜感激。

如何检测 xamarin UWP 应用程序中标签元素的文本值更改?

Label 包含PropertyChanged事件,您可以监听它以检查当前Text属性是否更改。

例如

MyLabel.PropertyChanged += MyLabel_PropertyChanged;
private void MyLabel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == "Text")
    {
        // process logic
    }
}

如果你想从视图模型中监听绑定属性,你需要为你的视图模型添加事件处理程序。 更多请参考本案例回复

例如

public MyClass() => PropertyChanged += MyClass_PropertyChanged;
private void MyClass_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
    if (e.PropertyName == nameof(LocationName) || e.PropertyName == nameof(SubLocationName))
    {
        RaisePropertyChanged(nameof(LocationCompleteString));
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM