我需要一种方法来检测特定标签元素何时具有其文本值集。这在应用程序加载开始时以编程方式发生。我查询sharepoint,并抓取文件列表。对于每个文件,我将显示它是否已检出。
如果文件被签出,那么我想在本地计算机中搜索一个自定义令牌文件,该文件确定是否为当前用户签出了该文件。如果我在本地计算机上找到特定文件的对应标记,我想将当前显示的文本/图标的颜色更改为红色。
此时,文件的初始列表显示正确,并且…当DriveItem.Publication.Level为checkout时,显示特定图标的逻辑工作正常。但是,在我的新事件处理程序中,它试图检测何时设置结帐图标,我不知道如何: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">
之后我有以下元素。如果结帐状态设置为"checkout">
,则需要对其进行评估和更改颜色。<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"/>
<<p>c代码/strong>这就是我的问题所在。首先,我似乎无法捕捉到正确的属性名称。我试着
- DriveItem.Publication.Level
但似乎都不起作用。
private void SPDocumentLibraryContentsChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "Level")
{
Console.WriteLine(sender);
Console.Write(e);
}
我试图遵循的例子是:处理标签文本更改
时的事件如有任何提示,我将不胜感激。
如何检测xamarin UWP应用程序中标签元素的文本值变化?
标签包含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));
}
}