data-binding 相关问题

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

为什么我在 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

如何将整个 XAML 组件绑定到 .NET MAUI 中的 ViewModel?

我是 .NET MAUI 的新手,正在尝试不再使用文件隐藏代码,而是使用 MVVM。 在代码隐藏中,很容易为标签提供“X:Name”属性并使用它来动态...

回答 1 投票 0

如何在带有查询id的雪花Python中使用时间旅行?

根据这个答案,我尝试对雪花Python连接器使用相同的模式。这没有问题: Snowflake_cursor.execute(""" 设置 q_id = last_query_id();""&quo...

回答 1 投票 0

如何在毛伊岛绑定基于字符串的skiasharp动画?

我正在创建一个天气应用程序,我从 API 获得当前天气状态的响应。因为它是一个字符串,所以我可以使用 [ObservableProperty] 将其存储在公共字符串 currentWeather 中

回答 1 投票 0

使用 .NET Maui,我在这个简单的命令导航场景中缺少什么?

另一个新手问题,尝试使用 RelayCommand 和 Navigation 类实现导航。我使用 MVVM 对 .NET Maui 进行了相当简单的设置。我有两个视图与相应的 ViewMo...

回答 1 投票 0

无法将类型 java.lang.String 的属性值转换为所需类型 java.util.Date

当我尝试在表单中输入日期时收到此错误。 任务控制器 @RequestMapping(值 = "/docreatetask", 方法 = RequestMethod.POST) 公共字符串doCreateTask(模型模型,@Valid Task

回答 6 投票 0

如何从ASP.NET Core中未知字段的表单中获取数据?

我想从表单中获取数据,但字段数量未知。 这就像一项调查。从数据库获取的问题和计数可能不同。 根据我从数据库中获取的数据,我重新...

回答 1 投票 0

DataTemplate 可以通过将其绑定到具有相同数据类型的不同属性来重用吗?

我使用具有相同数据类型的多个列的 DataGrid。我想对列使用 DataGridTemplateColumn,并为 CellTemplate 定义一个 DataTemplate,为 CellEditingTemplat 定义一个 DataTemplate...

回答 1 投票 0

如何在不更改变量的情况下使用角度插值绑定自动在 span/div 元素中换行(仅垂直调整大小,添加高度)

我们可以使用下面“跨度解决方案”部分中显示的方法自动增加跨度元素的高度: 超文本标记语言 跨度解决方案: 我们可以使用下面“跨度解决方案”部分中显示的方法自动增加跨度元素的高度: HTML <p> <strong>Solution with span:</strong> <span class="textarea" role="textbox" contenteditable> </span> </p> CSS .textarea { border: 1px solid #ccc; font-family: inherit; font-size: inherit; padding: 1px 6px; display: block; width: 100%; overflow: hidden; resize: both; min-height: 40px; line-height: 20px; } 来源: https://codepen.io/chriscoyier/pen/XWbqpzP0 但是它不适用于 Angular!因为 Angular 绑定的值是稍后加载的,不会考虑溢出。如果将 overflow: hidden 添加到样式中,则该值会直接超出跨度或简单地隐藏。 example.component.html: <p> <span class= "textarea" #FieldNameLabel contenteditable role="textbox"> {{example.value}} </span> </p> css 版本,带有 overflow:hidden 我放resize: vertical是因为我只希望高度随着变量中的字符串长度变得越来越长而增加。 .textarea { display: block; min-width: 17rem; max-width: 75%; min-height: 30px; line-height: 1.8rem; resize: vertical; overflow: hidden; padding-top: 0.8rem; } 如果我删除overflow: hidden;,效果会是这样的,值就超出了范围: .textarea { display: block; min-width: 17rem; max-width: 75%; min-height: 30px; line-height: 1.8rem; resize: vertical; padding-top: 0.8rem; } 那么有人可以帮助我编写一段代码,该代码可以使用 Angular 中从数据源到查看目标绑定(插值)的单向功能,根据变量的字符串长度自动增加 div/span 元素的高度吗? 提前非常感谢! 由于没有人回答我这个问题,我将给出一种可能的解决方案:使用带有指令的文本区域来控制其调整大小,而不是使用可内容编辑的跨度! 指令源代码: import { Directive, HostListener, ElementRef, OnInit } from '@angular/core'; @Directive({ selector: '[textAreaAutoResize]' }) export class TextareaAutoresizeDirective implements OnInit { @HostListener(':input') onInput() { this.resize(); } constructor(private elementRef: ElementRef) { } resize() { this.elementRef.nativeElement.style.height = 'auto'; this.elementRef.nativeElement.style.height = this.elementRef.nativeElement.scrollHeight + 'px'; } ngOnInit() { if (this.elementRef.nativeElement.scrollHeight) { setTimeout(() => this.resize()); } } } 替换原始文本区域的示例文本区域(内容可编辑范围) <textarea class= "field-name-label" #FieldNameLabel textAreaAutoResize role="textbox">{{example.value}}</textarea> 如果有人有使用普通元素(如(“span”、“div”、“p”等)和“contenteditable”)的解决方案,这些元素能够根据角度绑定变量调整大小,欢迎您在下面发布。

回答 1 投票 0

如何在 .NET 8 中的 Blazor UI for Identity 中实现扩展用户属性?

我在将数据保存到 Blazor UI for Identity .NET 8 中的扩展用户属性时遇到问题。 我的问题是在 Components/Account/Pages/Manage/Index.razo 的 OnValidSubmitAsync() 方法中...

回答 1 投票 0

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