data-binding 相关问题

将两个数据/信息源绑定在一起并使它们保持同步的一般技术。

ViewModel 中 TextBlock 的文本更改时运行动画

我正在按照 MVVM 模式制作 WPF 应用程序。我有一个按钮和文本块。 TextBlock 仅当其文本不为空时才显示。应用程序启动时,文本为空,文本块不是...

回答 3 投票 0

MAUI 如何在 ViewModel 中访问 XAML 地图 VisibleRegion

我在 XAML 中有一个 MAUI 地图控件,我需要访问 ViewModel 中的 VisibleRegion 属性,但该属性不可绑定。谁能帮我想出一个解决方法如何访问这个

回答 1 投票 0

如何在 WPF XAML 中的转换器调用中执行绑定?

这个应该很简单,但是我找不到。 目前,我有以下触发器: 这个应该很简单,但是我找不到。 目前,我有以下触发器: <DataTrigger Binding="{Binding warmed, Converter={converters:IsGreaterThan 185}}" Value="False"> 如您所见,有一个与固定值(185)的比较,但我希望它是可变的,所以我尝试了这样的方法: <DataTrigger Binding="{Binding warmed, Converter={converters:IsGreaterThan "{Binding MaxMinutes}" } }" Value="False"> (出于可读性原因,我添加了一些空格。 虽然这应该非常简单,但我似乎没有找到。 有人有想法吗? 预先感谢 P.s.您很快就将此问题标记为重复问题,但重复的问题基于 ConverterParameter。 结果我尝试将自己的情况转换成一个情况,使用这样的ConverterParameter,但是没有成功: <DataTrigger Binding="{Binding warmed, Converter={converters:IsGreaterThan}, ConverterParameter=185}" Value="False"> => 这似乎不起作用。谁能告诉我如何使用 ConverterParameter 将我的情况转换为一种情况? 打开“创建数据绑定”对话框时,我看到的是: 如您所见,没有任何 185 值的痕迹,尽管它在我的解决方案中至关重要。当我将其填写为 ConverterParameter 时,这就是我得到的: <DataTrigger Binding="{Binding warmed, ConverterParameter=185, Converter={converters:IsGreaterThan 185}}" Value="False"> ...并且再次无法声明任何多重绑定(因为我无法通过尝试键入来完成它,所以我尝试使用 Visual Studio“属性”编辑器来获取它)。 编辑:新的一天,新的尝试 再次尝试,这次尝试介绍MultiBinding: <DataTrigger> <DataTrigger.Binding> <MultiBinding> <Binding Path="warmed"/> <Binding Converter="{converters:IsGreaterThan 185}"/> <Binding Value="False"/> </MultiBinding> </DataTrigger.Binding> => 它会产生两条错误消息: XLS0413:在“Binding”类型中找不到属性“Value”。 XDG0012:成员“Value”无法识别或无法访问。 再次感谢 注释是正确的,即不可能直接将 ConverterParameter 与使用纯 XAML 的变量一起使用。 XAML 就是这样不灵活。 虽然 MultiBinding 可以在这里工作,但我认为这是一种冒险的方法(稍后会详细介绍),而且肯定是矫枉过正。相反,我会简单地在视图模型级别处理这个问题,方法是定义一个 bool POCO 属性 WarmEnough,其值源自 Warmed 和 MaxMinutes: public class ViewModel : INotifyPropertyChanged { public bool WarmEnough => this.Warmed >= this.MaxMinutes; private double _warmed; public double Warmed { get { return _warmed; } set { if (_warmed == value) return; _warmed = value; OnPropertyChanged(); OnPropertyChanged(nameof(Warmed)); } } private double _MaxMinutes; public double MaxMinutes { get { return _MaxMinutes; } set { if (_MaxMinutes == value) return; _MaxMinutes = value; OnPropertyChanged(); OnPropertyChanged(nameof(Warmed)); } } public event PropertyChangedEventHandler? PropertyChanged; private void OnPropertyChanged([CallerMemberName] string? name = null) { this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); } } 然后您只需将触发器绑定到 WarmEnough 属性,而不考虑转换器等。 (只要确保您不需要出于某种原因进行双向绑定即可!)这是有效的,因为每当 WarmEnough 或 Warmed 发生更改时,都会引发 MaxMinutes 的属性更改。因此,每当这些属性中的任何一个发生更改时,都会触发 Trigger。 从功能上来说,它与 MultiBinding 相同 - 在 Convert 的 IMultiValueConverter 方法中,你基本上会做我建议你在 WarmEnough 的 getter 中做的同样的事情 - 但问题是值将作为 object 数组进入多转换器,您需要检查和转换其类型,这取决于 XAML 中 Binding 的顺序。如果没有明确的文档,这很容易让未来的您和/或您的继任者陷入困境。 IMO MultiBinding确实最适合所有值都是相同类型并且正确顺序要么明显要么不相关的情况,例如对多个条件进行布尔 AND/OR/XOR 检查、将字符串连接在一起等。可以通过这种方式完成,所以也许克莱门斯会很友善地向我们展示。但我会坚持使用基于视图模型的方法并缩短所有这些。

回答 1 投票 0

如何绑定到使用组件标签助手渲染的组件值

我需要在预先存在的视图和页面上使用一些作为剃刀组件构建的自定义输入,但似乎无法使用组件标签帮助程序使其工作。例如组件代码...

回答 1 投票 0

将 MenuItem 图标颜色绑定到 MenuItem 的前景

问题 我有一个带有控制模板的 MenuItem,该模板可以更改 MenuItem 的前景,如下所示: 问题 我有一个带有控制模板的 MenuItem,可以更改 MenuItem 的 Foreground,如下所示: <ControlTemplate TargetType="MenuItem"> <StackPanel Background="{Binding Background}" Orientation="Horizontal"> <ContentPresenter Content="{TemplateBinding Icon}"/> <TextBlock Text="{TemplateBinding Header}"/> </StackPanel> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Setter Property="Foreground" Value="Red"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> 我想将图标的颜色绑定到该前景色。在这种情况下,图标只是一个圆圈。我尝试了以下绑定: <MenuItem Header="Sub"> <MenuItem.Icon> <Ellipse Width="16" Height="16" Fill="{Binding Foreground, RelativeSource={RelativeSource AncestorType=MenuItem}}"/> </MenuItem.Icon> </MenuItem> 但是,这会在应用程序启动时出现以下绑定错误,并且椭圆最终不会被渲染: System.Windows.Data 错误:4:找不到引用“RelativeSource FindAncestor,AncestorType='System.Windows.Controls.MenuItem',AncestorLevel='1'' 进行绑定的源。 BindingExpression:Path=前景;数据项=空;目标元素是“椭圆”(名称=“”);目标属性是“填充”(类型“画笔”) 我还尝试在图标中放置一个虚拟元素,以传播前景并绑定到此: <MenuItem.Icon> <Grid> <TextBlock Name="foregroundCapture"/> <Ellipse Width="16" Height="16" Fill="{Binding Foreground, ElementName=foregroundCapture}"/> </Grid> </MenuItem.Icon> 但这给出了类似的错误: System.Windows.Data 错误:4:找不到引用“ElementName=foregroundCapture”的绑定源。 BindingExpression:Path=前景;数据项=空;目标元素是“椭圆”(名称=“”);目标属性是“填充”(类型“画笔”) 如何才能使绑定生效?仅供参考,图标最终将是资源字典中的一个对象。因此它将无法访问实际的菜单项。 替代解决方案 我可以想到几个替代解决方案。但实际上他们都不是很好: 创建具有 MouseOverIcon 属性的 MenuItem 子类并让触发器使用它。 为每个图标创建自定义控件,并传播 Foreground 属性。这将允许直接在控件内进行直接绑定。 完整示例 <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApplication1" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <Style TargetType="MenuItem"> <Style.Triggers> <Trigger Property="Role" Value="SubmenuItem"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="MenuItem"> <StackPanel Background="{Binding Background}" Orientation="Horizontal"> <ContentPresenter Content="{TemplateBinding Icon}"/> <TextBlock Text="{TemplateBinding Header}"/> </StackPanel> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Setter Property="Foreground" Value="Red"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Trigger> </Style.Triggers> </Style> </Window.Resources> <DockPanel> <Menu DockPanel.Dock="Top"> <MenuItem Header="Header"> <MenuItem Header="Sub"> <MenuItem.Icon> <Grid> <TextBlock Name="foregroundCapture"/> <Ellipse Width="16" Height="16" Fill="{Binding Foreground, ElementName=foregroundCapture}"/> </Grid> </MenuItem.Icon> </MenuItem> </MenuItem> </Menu> <Grid> </Grid> </DockPanel> </Window> 你可以尝试这样的绑定: <Ellipse Width="16" Height="16" Fill="{Binding RelativeSource={RelativeSource Mode=Self}, Path=(TextElement.Foreground)}"/>

回答 1 投票 0

如何将视频绑定到 MediaElement 的源?

我正在使用 James Montemagno 的 Monkey Finder 应用程序。 https://github.com/jamesmontemagno/MonkeysApp-Workshop 我正在尝试将视频添加到详细信息页面,但在运行时出现错误...

回答 1 投票 0

WPF - 如何从 DataTemplate 为自定义用户控件设置正确的 DataContext

我正在尝试制作一个自定义用户控件(TSFloorPlanProductDispenserStockViewer)来显示错误代码和供用户交互的按钮列表。在数据模板中 (

回答 1 投票 0

TextBox 的数据绑定

我有一个基本属性,用于存储 Fruit 类型的对象: 水果食品; 公共水果食品 { 得到{返回这个.food;} 放 { this.food=值; this.RefreshDataBindings();...

回答 4 投票 0

如何使用数据绑定设置 android:inputType

我正在尝试使用以下数据绑定表达式在显示密码的旧方式之间切换: android:password="@{isMyFlagTrue}" 但是,当我尝试使用 inputType 代替...

回答 1 投票 0

为什么我在 ComboBox 中遇到异常('System.NullReferenceException')

如果我将事件处理程序添加到组合框(例如 SelectionChanged),我会遇到异常。谁能告诉我为什么。 奇怪的行为,因为在我的笔记本电脑上安装了 VS2010 的 win7 时它运行

回答 4 投票 0

可绑定属性问题屏蔽行为

我正在尝试实施一个掩码来调整我的电话号码的输入,但我正在收集来自该国家/地区的行为 用户选择的。 我正在尝试实施一个掩码来调整我的电话号码的输入,但我正在收集来自该国家/地区的行为 用户选择的。 <Entry Keyboard="Numeric" Placeholder="Telephone Number" BackgroundColor="#FFFFFF" IsSpellCheckEnabled="True"> <Entry.Behaviors> <behaviors:MaskedBehavior Mask="{Binding SelectedCountry.Mask}" /> </Entry.Behaviors> </Entry> 但是当值发挥作用时,行为就会出现问题。 public class MaskedBehavior : Behavior<Entry> { private string _mask = "(XXX) XXXX XXXX"; public static readonly BindableProperty MaskProperty = BindableProperty.Create("Mask", typeof(string), typeof(MaskedBehavior), null, BindingMode.TwoWay, null, propertyChanged: OnItemsSourceChanged); static void OnItemsSourceChanged(BindableObject bindable, object oldValue, object newValue) { var control = (MaskedBehavior)bindable; control.Mask = (string)newValue; } public string Mask { get { return (string)GetValue(MaskProperty); } set { SetValue(MaskProperty, _mask); SetPositions(); } } private void OnEntryTextChanged(object sender, TextChangedEventArgs args) { var entry = sender as Entry; var text = entry.Text; if (string.IsNullOrWhiteSpace(text) || _positions == null) return; if (text.Length > _mask.Length) { entry.Text = text.Remove(text.Length - 1); return; } foreach (var position in _positions) if (text.Length >= position.Key + 1) { var value = position.Value.ToString(); if (text.Substring(position.Key, 1) != value) text = text.Insert(position.Key, value); } if (entry.Text != text) entry.Text = text; } protected override void OnAttachedTo(Entry entry) { entry.TextChanged += OnEntryTextChanged; base.OnAttachedTo(entry); } protected override void OnDetachingFrom(Entry entry) { entry.TextChanged -= OnEntryTextChanged; base.OnDetachingFrom(entry); } IDictionary<int, char> _positions; void SetPositions() { if (string.IsNullOrEmpty(Mask)) { _positions = null; return; } var list = new Dictionary<int, char>(); for (var i = 0; i < Mask.Length; i++) if (Mask[i] != 'X') list.Add(i, Mask[i]); _positions = list; } 源列表是这样的,我只是编造了一些东西,但在我要修复为正确的行为之后。 **Xaml** <Picker HeightRequest ="40" WidthRequest="300" Title="Country/Region" ItemsSource="{Binding Countries}" ItemDisplayBinding="{Binding CountryName}" SelectedItem="{Binding SelectedCountry}" **C#** static CountriesData() { Countries = new List<Country>(); Countries.Add(new Country { Id = "93", CountryName = "Afghanistan (+93)", Mask = "(XXX) XXXX XXXX" }); Countries.Add(new Country { Id = "335", CountryName = "Albania (+355)", Mask = "(XXX) XXXX XXX" }); } 如果有人可以帮忙=) 抱歉,这是我的第一个项目,如果我没有以正确的方式表达我的意思=/ 创建 BehaviorBase 来更新您的 behavior。 public class BehaviorBase<T> : Behavior<T> where T : BindableObject { #region Properties public T AssociatedObject { get; private set; } #endregion #region NormalMethods private void OnBindingContextChanged(object sender, EventArgs e) { OnBindingContextChanged(); } #endregion #region Overrides protected override void OnAttachedTo(T bindable) { base.OnAttachedTo(bindable); AssociatedObject = bindable; if (bindable.BindingContext != null) { BindingContext = bindable.BindingContext; } bindable.BindingContextChanged += OnBindingContextChanged; } protected override void OnDetachingFrom(T bindable) { base.OnDetachingFrom(bindable); bindable.BindingContextChanged -= OnBindingContextChanged; AssociatedObject = null; } protected override void OnBindingContextChanged() { base.OnBindingContextChanged(); BindingContext = AssociatedObject.BindingContext; } #endregion } 让你的MaskedBehavior继承BehaviorBase。 public class MaskedBehavior : BehaviorBase<Entry> { …….. } 和你的用法一样。 我已经将整个项目上传到GitHub上,大家可以下载参考。 https://github.com/WendyZang/Test/tree/master/Behavior 能否分享一下完整的解决方案(github项目已经不存在了)

回答 2 投票 0


如何使用 DataBInding 解决这个问题?

在这个项目中,我想创建一本像素着色书。 在这个项目中,我想创建一本像素着色书。 <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> <ItemsControl ItemsSource="{Binding ColorMatrix}"> <ItemsControl.ItemTemplate> <DataTemplate> <ItemsControl ItemsSource="{Binding}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal"/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <pxl:Pixel Style="{StaticResource Pixel}" PrimaryColor="{Binding Converter={StaticResource ColorConverter}}"/> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </ScrollViewer> ColoringBookView.xaml 这只是 Color[][] 数组的视图。 ColorMatrix 是 Color[][] 类型 public class ColorConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value is System.Drawing.Color drawingColor) { return Color.FromArgb(drawingColor.A, drawingColor.R, drawingColor.G, drawingColor.B); } return Colors.Black; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return null; } } ColoreConverter.cs public class Pixel : CheckBox { public static readonly DependencyProperty PrimaryColorProperty = DependencyProperty.Register("PrimaryColor", typeof(Color), typeof(Pixel)); public static readonly DependencyProperty AccentColorProperty = DependencyProperty.Register("AccentColor", typeof(Color), typeof(Pixel)); public static readonly DependencyProperty IsDrawedProperty = DependencyProperty.Register("IsDrawed", typeof(bool), typeof(Pixel)); public Color PrimaryColor { get { return (Color)GetValue(PrimaryColorProperty); } set { SetValue(PrimaryColorProperty, value); } } public Color AccentColor { get { return (Color)GetValue(AccentColorProperty); } set { SetValue(AccentColorProperty, value); } } public bool IsDrawed { get { return (bool)GetValue(IsDrawedProperty); } set { SetValue(IsDrawedProperty, value); } } } Pixel.cs 这是 WPF 的自定义控件。 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:pxl="clr-namespace:PXL.Core.Theme" xmlns:converters="clr-namespace:PXL.Core.Converters"> <Style TargetType="{x:Type pxl:Pixel}" x:Key="Pixel"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type pxl:Pixel}"> <Grid> <Rectangle Height="30" Width="30"> <Rectangle.Fill> <SolidColorBrush Color="{TemplateBinding PrimaryColor}"/> </Rectangle.Fill> </Rectangle> <TextBlock Text="Pixel" Background="{TemplateBinding PrimaryColor}" Foreground="{TemplateBinding PrimaryColor}"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> </ResourceDictionary> Pixel.xaml 我在数据绑定方面遇到问题,但我不明白出了什么问题。 Pixel.xaml 中的 TextBlock.Background 和 TextBlock.Foreground 不会改变。 Background的Foreground和TextBlock属性只能设置为System.Windows.Media.Brush值。 您无法将它们绑定到 System.Windows.Media.Color 或 System.Drawing.Color。

回答 1 投票 0

在没有触发器的情况下,如何将值从子级传递给父级?

我有一个带有子组件的父组件 父组件 孩子里有孙子 子组件 我有一个带有子组件的父组件 <h3>Parent component</h3> <Child /> 孩子有孙子 <h3>Child component</h3> <Grandchild @bind-SelectedVariant="_selectedVariant" /> <h4>Costs: @GetCosts()</h4> GetCosts() 取决于 _selectedVariant。 孙子是 <h3>Grandchild component</h3> <input type="checkbox" @onclick="(e) => ToggleCheckboxAsync("Variant 1")" /> @code { [Parameter] public string SelectedVariant { get; set; } = ""; [Parameter] public EventCallback<string> SelectedVariantChanged { get; set; } private async Task OnSelectedVariantChange(string selectedVariant) => await SelectedVariantChanged.InvokeAsync(selectedVariant); private async Task ToggleCheckboxAsync(string clickedVariantName) { await OnSelectedVariantChange(clickedVariantName); StateHasChanged(); } } 这个效果很好。当我切换复选框时,显示的成本会更新。 (仅在选中复选框时,因为本示例中未实现取消选中。) 我发现,我需要父组件中的成本。所以,我的第一次尝试是通过 EventCallback 添加另一个绑定: <h3>Child component</h3> <Grandchild @bind-SelectedVariant="_selectedVariant" /> <h4>Costs: @GetCosts()</h4> @code { [Parameter, EditorRequired] public int Costs { get; set; } = -1; [Parameter] public EventCallback<int> CostsChanged { get; set; } private async Task OnCostsChange() => await CostsChanged.InvokeAsync(Costs); } 和 <h3>Parent component</h3> <Child @bind-Costs="_costs" /> 但是我如何触发OnCostsChange()?使用 OnSelectedVariantChange() 很容易,因为这只是复选框的单击事件。 由于 Child 组件中没有触发器,我认为 OnCostsChange() 没有任何意义,Costs & EventCallback<int> CostsChanged 属性足以进行双向绑定。有关更多详细信息,您可以查看此 document 如果你想从父组件中调用子组件中的方法,你可以尝试: <Child @bind-Costs="_costs" @ref="Child"/> <button @onclick="TriggerChildMethod">Button</button> @code{ public int _costs; private Child Child { get; set; } public async Task TriggerChildMethod() { await Child.SomeMethod(); } } 在子组件中: public async Task SomeMethod() {......} 我认为你可能有点过于复杂化了。如果您打算将值从父级传递给子级,则只需要进行双向绑定。如果孩子执行一些逻辑来得出该值,则只需使用回调即可。 这是我的Grandchild。我猜现实中有多种变体,所以我就这样编码了。 <h3>Grandchild component</h3> <input type="checkbox" @bind:get="@(IsChecked("Variant 1"))" @bind:set="@((e) => ToggleCheckboxAsync("Variant 1"))" /> @code { [Parameter] public string SelectedVariant { get; set; } = string.Empty; [Parameter] public EventCallback<string> SelectedVariantChanged { get; set; } private bool IsChecked(string value) => SelectedVariant == value; private async Task ToggleCheckboxAsync(string value) { if (this.IsChecked(value)) await this.SelectedVariantChanged.InvokeAsync(string.Empty); else await this.SelectedVariantChanged.InvokeAsync(value); // not required //StateHasChanged(); } } 然后孩子: <h3>Child component</h3> <GrandChild @bind-SelectedVariant:get="_selectedVariant" @bind-SelectedVariant:set="this.OnVariantChanged" /> <h4>Costs: @_costs</h4> @code { // this is a calcuated value, not set from the parent // Parameter, EditorRequired] public int Costs { get; set; } = -1; [Parameter] public EventCallback<int> CostsChanged { get; set; } private int _costs; private string _selectedVariant = string.Empty; private async Task OnVariantChanged(string value) { _selectedVariant = value; _costs = Random.Shared.Next(5,25); if (value.Equals("Variant 1")) _costs = _costs + 100; await this.CostsChanged.InvokeAsync(_costs); } } 还有家: @page "/" <PageTitle>Home</PageTitle> <h1>Hello, world!</h1> <Child CostsChanged="this.OnCostsChanged" /> <div class="bg-dark text-white m-2 p-2"> <pre>Costs: @_costs</pre> </div> @code{ private int _costs; private Task OnCostsChanged(int value) { _costs = value; return Task.CompletedTask; } }

回答 2 投票 0

Winforms datagridview - 可变列数 - INotifyPropertyChanged

假设我有两门课: 公共课时间:INotifyPropertyChanged { 公共整型值 { // ... } // INotifyPropertyChanged 实现 } 公开课日 { 噗...

回答 1 投票 0

WPF - 如何直接在 XAML 文件中设置 Bound 属性,并使用预设的固定值?

我想知道是否可以在 XAML 中设置 BOUND int 变量/属性,并在行为类似于按钮的控件中为其提供直接写入 XAML 文件中的固定值: 点击来自

回答 1 投票 0

为什么不在 Android Fragment 视图绑定中使用 Lateinit 修饰符?

在android文档中,我们有没有lateinit的视图绑定的示例: 私有变量_绑定:ResultProfileBinding? = 空 // 该属性仅在onCreateView和onCreateView之间有效 // onDestroyView.

回答 3 投票 0

如何将一个控件绑定到另一个控件的相反值?

我有一个入口控件,我想将其设置为密码。我还有一个复选框控件,我想将其设置为显示密码复选框。我的 XAML 代码如下所示: 我有一个入口控件,我想将其设置为密码。我还有一个复选框控件,我想将其设置为显示密码复选框。我的 XAML 代码如下所示: <Entry Placeholder="Enter Password Viewing Password" Grid.Row="3" TextColor="White" x:Name="vwPasswrd" BindingContext="{x:Reference chkVwPasswdShow}" IsPassword="{Binding IsChecked}" Margin="20,0,0,0"/> <HorizontalStackLayout Grid.Row="3" Grid.Column="1" HorizontalOptions="Center"> <CheckBox x:Name="chkVwPasswdShow" VerticalOptions="Center"/> <Label Text="Show Password" FontSize="Micro" VerticalOptions="Center" TextColor="White"/> </HorizontalStackLayout> 但是,按照此代码的方式,复选框未选中,当用户开始在输入控件中输入数据时,将显示实际文本。单击复选框后,文本将显示为密码点。 我想反过来做: 取消选中该复选框时,我希望文本显示为密码点。 选中该复选框后,我希望文本显示为纯文本。 看来我必须以相反的方式绑定它。我该怎么做? 您可以使用 MAUI Community Toolkit 中的 InvertedBoolConverter 来实现此目的: <!-- Add converter here --> <ContentPage.Resources> <mct:InvertedBoolConverter x:Key="InvertedBoolConverter" /> </ContentPage.Resources> <Grid> <!-- use it here: --> <Entry Placeholder="Enter Password Viewing Password" Grid.Row="3" TextColor="White" x:Name="vwPasswrd" BindingContext="{x:Reference chkVwPasswdShow}" IsPassword="{Binding IsChecked, Converter={StaticResource InvertedBoolConverter}}" Margin="20,0,0,0"/> <!-- ... --> </Grid>

回答 1 投票 0

如何在关闭详细视图时取消对 @Binding var 的编辑?

我有一个待办事项列表应用程序。任务是显示在列表中的 @ObservableObjects。用户可以打开详细信息视图来编辑任务属性(截止日期、位置、时间表、注释等)。 我有保存和取消...

回答 1 投票 0

使用 ngModel 将数据正确分配给公式时出现问题

我正在尝试将检索到的数据分配给表单。数据已正确检索,但是当我尝试将数据的每个值传递到其相应的输入或选择时,它不会将它们放置在...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.