如何检测 xamarin UWP 应用程序中标签元素的文本值更改?
Posted
技术标签:
【中文标题】如何检测 xamarin UWP 应用程序中标签元素的文本值更改?【英文标题】:how to detect text value change for label element in xamarin UWP application? 【发布时间】:2021-12-11 01:36:16 【问题描述】:我需要一种方法来检测特定标签元素何时设置了文本值。这在应用程序加载时以编程方式发生。我查询共享点,并获取文件列表。对于每个文件,我都会显示它是否已签出。
如果该文件已签出,然后我想在本地计算机中搜索一个自定义令牌文件,该文件确定是否是当前用户已签出该文件。如果我在本地计算机上找到特定文件的相应标记,我想将当前显示的文本/图标的颜色更改为红色。
问题
此时,文件的初始列表正确显示,并且...当 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"/>
CS 代码
这就是我的问题所在。首先,我似乎无法捕获正确的属性名。我试过了
DriveItem.Publication.Level 等级但似乎两者都不起作用。
private void SPDocumentLibraryContentsChanged(object sender, PropertyChangedEventArgs e)
if (e.PropertyName == "Level")
Console.WriteLine(sender);
Console.Write(e);
我试图遵循的示例是这样的: Handle event when Label Text Change
任何提示将不胜感激。
【问题讨论】:
为什么需要监控 UI 的变化?您的代码正在更新 UI,那么为什么不从源头监控更改呢? 当用户启动我的应用程序时,主要上游数据库中唯一可用的信息是 - 共享文件列表,以及文件是否已签出。它不存储文件签出给谁。所以现在,当用户使用我的应用程序签出文件时 - 我在本地创建一个隐藏文件。当他们签入时,我删除了隐藏文件。在应用程序启动时,我需要 a) 从上游获取列表。 b) 强制应用检查我的本地文件夹是否有隐藏文件,然后更新图标的颜色。 这仍然无法解释为什么您依赖 UI 来检测数据状态的变化。 @Jason 我想对于应用程序启动场景,我可以调用“checklocalfolder()”的排序方法,并在初始化列表后调用它......但我想避免不得不每次检查整个共享文件列表的内容。所以......对于应用程序启动,因为 GUI 已经循环并填写每个文件的状态 - 我虽然跟踪文本属性何时更改会更有效 听起来您缺少驱动 UI 的内部数据模型 【参考方案1】:如何在 xamarin UWP 应用程序中检测标签元素的文本值变化?
标签包含PropertyChanged
事件,你可以监听它来检查当前Text
属性是否改变。
例如
MyLabel.PropertyChanged += MyLabel_PropertyChanged;
private void MyLabel_PropertyChanged(object sender, PropertyChangedEventArgs e)
if (e.PropertyName == "Text")
// process logic
如果你想监听视图模型的绑定属性,你需要为你的视图模型添加事件处理程序。更多请参考本案例reply
例如
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));
【讨论】:
以上是关于如何检测 xamarin UWP 应用程序中标签元素的文本值更改?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xamarin.UWP 应用程序中实现 LongPress?
如何将“安装”目标添加到 Xamarin.UWP .csproj 文件?
如何在 Visual Studio 2019 中使用 Xamarin Forms(UWP) 和 C# 创建 Web 应用程序