data-binding 相关问题

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

如何让 ASP.NET Core 绑定到简单数据类型

我正在将中型 .NET 4、ASP.NET MVC(旧)应用程序迁移到 .NET 7、ASP.NET Core MVC(新)。 我有很多带有操作方法的控制器,这些方法使用简单类型

回答 1 投票 0

如何将自定义 UserControl 的依赖属性双向绑定到另一个 UserControl 的 DataContext 的属性?

我有一个用户控件,其代码隐藏已声明依赖属性。我还有另一个 UserControl 作为主 UI。 主 UI 用户控件已将其 DataContext 设置为 viewmo...

回答 1 投票 0

当我使用单击属性时,事件绑定不起作用

我正在尝试测试事件绑定,但当我使用单击事件时它不起作用,我将附加代码 这是我的 html 模板,适用于属性绑定

回答 0 投票 0

WPF 数据绑定帮助

我是 WPF 新手,我正在尝试弄清楚数据绑定是如何工作的,但我运气不佳。 我尝试从简单的事情开始 - 将文本框的内容绑定到字符串变量...

回答 2 投票 0

WPF - UI 未更新,但 debug.writeline 正确更新

早上好,我一直在尝试为我的应用程序创建一个更新程序,并且几乎得到了最终结果,但是我似乎无法让 UI 报告我设置 Onpropertychanged 事件的进度...

回答 1 投票 0

.net Maui 未将多对多绑定到选取器中的同一张表

我正在创建一个应用程序来注册团队进行体育统计。在本例中,我需要一个视图 (MVVM) 来选择两支球队并分配比赛结果。视图的第一部分(集合视图)wo...

回答 1 投票 0

当项目具有 BrowserAnimationsModule 时,Angular UI 未拾取数据模型更改

我的项目有一个选择程序的页面。它工作得很好,直到我将 BrowserAnimationsModule 添加到我的项目中。 该页面有一个按钮“切换到程序A”。它始终工作正常,没有妈妈...

回答 2 投票 0

Angular:如何使用动态文本进行数据绑定输入

我想动态更改句子中所选单词的样式(使用自定义管道),如下所示: {{ 产品.句子 | italicArray:product.italicsArray }} 这将创建: 嗨...

回答 1 投票 0

如何将 wpf 组合框绑定到枚举类型并将其显示在组合框中作为定义枚举的描述?

公共枚举 IVAC_VT_SHIFT_SPD { [描述(“16.1299991607666”)] 数据16, [描述(“32.130001068115234”)] 数据32, } public enum IVAC_VT_SHIFT_SPD { [Description("16.1299991607666")] DATA16, [Description("32.130001068115234")] DATA32, } <ComboBox Grid.Row="8" Grid.Column="2" Width="194" Height="40" Margin="0,0,3,0" HorizontalAlignment="Right" VerticalContentAlignment="Center" ItemsSource="{Binding Source={StaticResource IVAC_VT_SHIFT_SPD}}" SelectedValue="{Binding VTShiftSPD}" /> <ObjectDataProvider x:Key="IVAC_VT_SHIFT_SPD" MethodName="GetValues" ObjectType="{x:Type System:Enum}"> <ObjectDataProvider.MethodParameters> <x:Type TypeName="enm:IVAC_VT_SHIFT_SPD" /> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> private IVAC_VT_SHIFT_SPD _VTShiftSPD = IVAC_VT_SHIFT_SPD.DATA16; public IVAC_VT_SHIFT_SPD VTShiftSPD { get => _VTShiftSPD; set { _VTShiftSPD = value; OnPropertyChanged(nameof(VTShiftSPD)); } } 我想要的是将枚举类型值绑定到组合框。但是,我希望组合框的内容显示为说明的内容。该选择必须选择为枚举。 有没有不用转换器的方法? 有没有办法只用Xaml来完成它? 我想要一个简单的方法。 我认为您可以非常接近地实现您正在寻找的目标。我确实使用了几个 C# 类来完成它,但这些类将适用于未来的任何枚举,而无需您不断创建其他类或代码来方便在下拉列表中获取描述。 在我的示例中,我能够产生以下结果 public enum IVAC_VT_SHIFT_SPD { [Description("16.1299991607666")] DATA16, [Description("32.130001068115234")] DATA32, } <Window ... xmlns:local="clr-namespace:StackOverflowAnswers.Wpf" ...> <ComboBox x:Name="Combo" ItemsSource="{Binding Source={enums:EnumBindingSource {x:Type enums:IVAC_VT_SHIFT_SPD}}}" DisplayMemberPath="Description" SelectedValuePath="Value" /> 为了促进这一点,我使用了此链接中概述的方法的改编版:https://brianlagunas.com/a-better-way-to-data-bind-enums-in-wpf/。如果您直接遵循这一点,则无需枚举的 ViewModel 即可获得非常相似的结果。然而,我喜欢使用 ViewModel,因为它允许我根据需要调整一些东西,比如添加对图标属性的支持。 在我的示例中,我创建了一个 EnumViewModel 类来容纳组合框中将显示的内容: public class EnumViewModel { public EnumViewModel(Enum value) { Value = value; Description = getDescription(value); } public Enum Value { get; } public string Description { get; } private string getDescription(Enum value) { if (!(value?.GetType().GetField(value?.ToString()) is FieldInfo enumField)) // value is null... return string.Empty; var descriptionAttribute = enumField.GetCustomAttributes(typeof(DescriptionAttribute), false) .OfType<DescriptionAttribute>() .FirstOrDefault(); if (descriptionAttribute is null || string.IsNullOrEmpty(descriptionAttribute.Description)) // description attribute is missing or blank... return value.ToString(); return descriptionAttribute.Description; } } 还有一个 MarkupExtension 允许我直接绑定到它,而不必将其包含在视图模型或后面的代码中。这设置了使用 Source={enums:EnumBindingSource ...} 的能力。 public class EnumBindingSourceExtension : MarkupExtension { private Type _enumType; public Type EnumType { get => this._enumType; set { if (value == this._enumType) return; if (!isEnumType(value)) throw new ArgumentException("Type must be for an Enum."); this._enumType = value; } } private bool isEnumType(Type type) { if (type is null) return false; var enumType = Nullable.GetUnderlyingType(type) ?? type; return enumType.IsEnum; } public EnumBindingSourceExtension() { } public EnumBindingSourceExtension(Type enumType) { this.EnumType = enumType; } public override object ProvideValue(IServiceProvider serviceProvider) { if (this._enumType is null) throw new InvalidOperationException("The EnumType must be specified."); var actualEnumType = Nullable.GetUnderlyingType(this._enumType) ?? this._enumType; var enumValues = Enum.GetValues(actualEnumType) .OfType<Enum>() .Select(x => new EnumViewModel(x)) .ToList(); return enumValues; } } 枚举不应该显示在 UI 中。枚举是整数的简单枚举,其中每个值都有一个关联的名称。 您的场景根本超出了 enum 类型的意图。 如果您想定义一组常量,其中每个常量携带数据,那么您应该定义一个类型(class 或 struct)。这也将为您在视图中呈现数据提供更大的灵活性,而无需转换器和反射的额外开销。您最终会得到更干净、自然/直观的代码。在您的场景中使用 enum 并不优雅,也没有任何好处。 enum 必须具有代表性,属性或表中不存储任何元数据。 如果 enum 本身确实有意义,您甚至可以考虑使用此自定义类型来定义 enum 的属性 - 仅当该类型不是 enum 的扩展(用于携带元数据)时才会出现这种情况数据),因为 enum 值必须能够独立,即在没有元数据的情况下使用。 例如,如果您创建一个枚举 Color,其中包含 Color.Red 等值,并且如果没有实际的红色值,则无法使用这些值,那么 Color.Red 不应该是枚举,而应该是 class 或 struct 能够定义该元数据。 建议的解决方案如下所示: VTShiftSPD.cs // TODO::Implement IEquatable<VTShiftSPD> (don't forget to override GetHashCode) public readonly struct VTShiftSPD : IEquatable<VTShiftSPD> { public const string Data16 = "DATA16"; public const string Data32 = "DATA32"; public VTShiftSPD(string id, double value) { this.Id = id; this.Value = value; } public string Id { get; } public double Value { get; } } 您可以使用和比较它,例如如下(没有任何反映!): static Main() { var vTShiftSPD = new VTShiftSPD(VTShiftSPD.Data16, 16.1299991607666); Evaluate(vTShiftSPD); } private static void Evaluate(VTShiftSPD vTShiftSPD) { switch (vTShiftSPD.Id) { case VTShiftSPD.Data16: break; case VTShiftSPD.Data32: break; default: break; } } 如果从 VTShiftSPD 创建的实例集不是开放集,您甚至可以将它们本身定义为常量: VTShiftSPDs.cs static class VTShiftSPDs { public static readonly VTShiftSPD Spd16 = new VTShiftSPD(VTShiftSPD.Data16, 16.1299991607666); public static readonly VTShiftSPD Spd32 = new VTShiftSPD(VTShiftSPD.Data32, 32.130001068115234); } 并按如下方式使用它: static Main() { Evaluate(VTShiftSPDs.Spd16); } private static void Evaluate(VTShiftSPD vTShiftSPD) { switch (vTShiftSPD.Id) { case VTShiftSPD.Data16: break; case VTShiftSPD.Data32: break; default: break; } } 并优雅(且高效)地使用它来填充数据视图: MainWindow.xaml.cs // The data source for the ComboBox.ItemsSource public ObservableCollection<VTShiftSPD> VTShiftSPDs { get; } = new ObservableCollection<VTShiftSPD> { VTShiftSPDs.Spd16, VTShiftSPDs.Spd32, }; MainWindow.xaml <Window> <StackPanel> <ComboBox x:Name="VTShiftSPDSelector" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType Window}, Path=VTShiftSPDs}" DisplayMemberPath="Value" /> <Stackpanel DataContext="{Binding Elementname=VTShiftSPDSelector, Path=SelectedItem}> <TextBlock x:Name="Id" Text{Binding Id}" /> <!-- Displays e.g. DATA16 --> <TextBlock x:Name="Value" Text{Binding Value}" /> <!-- Displays e.g. 16.1299991607666 --> </StackPanel> </StackPanel> </Window>

回答 2 投票 0

除了使用 [JsonIgnore] 装饰器之外,还有其他方法可以在 JSON 序列化过程中忽略属性吗?

我正在使用 .net Maui MVVM 源生成器来创建属性作为可观察属性。我正在使用 System.Text.Json.Serialization 将类的属性序列化为 JSON。当我使用 [Json...

回答 1 投票 0

WPF 数据网格从网格获取更改的值并在视图模型中捕获它(坚果当前值)

xaml 文件: xaml 文件: <DataGrid x:Name="BrugerDataGrid" AutoGenerateColumns="False" CanUserAddRows="True" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False" CanUserSortColumns="False" IsReadOnly="False" SelectionMode="Single" SelectionUnit="FullRow" ItemsSource="{Binding Brugere, Mode=TwoWay}"> <i:Interaction.Triggers> <i:EventTrigger EventName="RowEditEnding"> <i:InvokeCommandAction Command="{Binding RowEditEndingCommand}" CommandParameter="{Binding SelectedItem, ElementName=BrugerDataGrid}" PassEventArgsToCommand="True" /> </i:EventTrigger> </i:Interaction.Triggers> <!-- DataGrid columns --> 视图模型: public ObservableCollection<Bruger> Brugere { get; set; } public ICommand RowEditEndingCommand => new RelayCommand<Object>(OnRowEditEnding); private void OnRowEditEnding(Bruger bruger) { // bruger is autogenerated from entity framework } 我收到的布鲁格是网格中数据更改之前的值。我如何获取更改后的值,以便我可以将更改后的数据存储到我的数据库 我一直在尝试用这种方法添加一个事件, private void OnRowEditEnding(布鲁格·布鲁格,DataGridRowEditEndingEventArgs e) 但这会给我一个错误: 公共 ICommand RowEditEndingCommand => new RelayCommand(OnRowEditEnding); 说: 参数 1:无法从“方法组”转换为“System.Action” 我认为 PassEventArgsToCommand="True" 也许会让我这样做。 RowEditEnding 事件发生在之前提交或取消行编辑。 您应该做的是在您的 Bruger 类中实现 IEditableObject 接口并处理 EndEdit() 方法中的逻辑。 另一个选项是在视图的事件处理程序中显式提交编辑: private bool _handle = true; private void OnRowEditEnding(object sender, DataGridRowEditEndingEventArgs e) { if (_handle) { _handle = false; BrugerDataGrid.CommitEdit(); var updatedItem = e.Row.Item as Bruger; var viewModel = this.DataContext as YourViewModel; if (updatedItem != null && viewModel != null) viewModel.RowEditEndingCommand.Execute(updatedItem); _handle = true; } } 将事件参数传递给视图模型会破坏 MVVM 设计模式。在视图的代码隐藏中以编程方式调用命令则不然。

回答 1 投票 0

无法弄清楚模型绑定 ASP.NET Core + Razor Pages 中出了什么问题

我试图简单地将所选项目填充到绑定属性 SelectedDataSourceIDs,但我无法弄清楚我做错了什么。 风景: @页 @model ContosoUniversity.Pages.Analysis.

回答 1 投票 0

Xamarin:ViewModel 不更新 UI

我第一次尝试实现 ViewModel 绑定,发现绑定到视图模型中的属性的标签没有更新以反映该值 我希望这是...

回答 1 投票 0

如何从 WPF 中的 ViewModel 启动故事板动画?

我一直在尝试实现菜单更改到另一个菜单之间的转换。我使用 WPF .Net 8 和 Caliburn Micro 进行 MVVM。 所以我在 MainView.xaml 中创建了故事板动画...

回答 1 投票 0

关于C# WinForms数据绑定(使用INotifyPropertyChanged)和数据刷新问题

我是初学者,正在使用C# WinForms开发网络程序。该程序不断尝试从远程服务器读取数据并将其同步显示在我的文本框中。另外...

回答 2 投票 0

Bind:在服务器端 blazor - c# - mudblazor 中未调用分配的方法之后

我正在尝试使用 @bind-Value 和 @bind-Value:after 在绑定发生后调用方法,但我的代码要么出现错误,要么不会调用该方法。 有了这个...

回答 1 投票 0

MAUI BindingContext 设置为 Binding 时不起作用

在我的主页上,我有一个 MainViewModel,其中包含一些属性,其中一个是 EffectsCtrl (另一个视图模型,EffectsControl 类的实例),其中包含与

回答 4 投票 0

数据绑定 TextBlock 在 Avalonia 中运行

我想做这个 从这个视图模型 公共类 MainWindowViewModel :ViewModelBase { 公共 ObservableCollection RunList { 获取;放; } 公共 MainWindowViewModel() ...

回答 1 投票 0

SWT/JFace 的未弃用数据绑定

我最近一直在研究 Eclipse 插件开发,当我尝试使用 Eclipse Bindings 选项卡将 SWT 文本绑定到我的数据模型中的字符串时,它生成的代码是依赖的...

回答 2 投票 0

ListView 网格中的网格

我有一个包含 id、名称和价格的列表视图。每个这样的项目都有一个带有类别的子列表。 所以“对于每个”项目我想显示所有子项目。 它应该是这样的: 但我不知道...

回答 3 投票 0

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