XAML 在.NET MAUI 7中,如何将“Binding”获得的值传递给DataTrigger的“Value”属性?

ha5z0ras  于 2023-04-03  发布在  .NET
关注(0)|答案(1)|浏览(228)

Entry.Text的长度等于Entry.MaxLength时,需要修改Label.TextColor,代码如下:

// Part of the ControlTemplate
...
<VerticalStackLayout>
    <Entry
        x:Name="entry"
        MaxLength="{TemplateBinding EntryLength}" />
    <Label HorizontalOptions="End" >
        <Label.Triggers>
            <DataTrigger TargetType="{x:Type Label}"
                         Binding="{Binding Source={x:Reference entry}, Path=Text.Length}"
                         Value="{Binding Source={x:Reference entry}, Path=MaxLength}" >
                <Setter Property="TextColor" Value="Red"/>
            </DataTrigger>
        </Label.Triggers>
    </Label>
</VerticalStackLayout>
....
brccelvz

brccelvz1#

你声称你想用MVVM来完成这件事,但你却在尽一切努力打破这种架构。
事实是,这个数据触发器:

<DataTrigger TargetType="{x:Type Label}"
      Binding="{Binding Source={x:Reference entry}, Path=Text.Length}"
      Value="{Binding Source={x:Reference entry}, Path=MaxLength}" >
   <Setter Property="TextColor" Value="Red"/>
</DataTrigger>

不必知道类Entry,它具有名为“文本”的属性,并且该属性具有自己的属性“长度”。
而且你不必手工编写随机的属性名,也不必在你的程序中制造bug(因为intelli-sense并不总是那么智能)。
这个条目,应该绑定到一些属性(但我没有看到?!?)。
显然,你已经有了MaxLenght的另一个属性(为什么是这个变量,我不知道。它不是很常见,有你的MaxLength变量。你确定这是你想要的吗?)。
所以你所要做的就是将一个字符串属性长度与另一个属性进行比较。这里与可视化元素无关。
编辑:看看这个答案,你可以从这里学到更多,而不是从文档... https://stackoverflow.com/a/73686153/6643940

相关问题