将两个数据/信息源绑定在一起并使它们保持同步的一般技术。
单独的 DataGrid 绑定到同一个 Observable 集合
我有一个带有 TabControl 的 WPF 应用程序,在两个不同的 TabItem 上,我想在每个 TabItem 上的 DataGrid 中显示相同的内容。 操作顺序如下: 用户选择信号或...
WPF - 将 Listview 绑定为 rowdetailstemplate 的子元素
我需要了解如何在 RowDetailsTemplate 内绑定列表视图。 这是我的 XAML: 我需要了解如何在 RowDetailsTemplate 中绑定 listview。 这是我的 XAML: <Window x:Class="TestWPF.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:TestWPF" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <DataGrid Name="TestDataGrid" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="Code" Binding="{Binding Code}" /> <DataGridTextColumn Header="Description" Binding="{Binding Description}"/> </DataGrid.Columns> <DataGrid.RowDetailsTemplate> <DataTemplate> <Border Background="Transparent" BorderBrush="White" BorderThickness="1" CornerRadius="15" Margin="10"> <Grid Margin="5"> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <StackPanel Grid.Column="0"> <StackPanel Orientation="Horizontal"> <TextBlock Text="CurrentStyle: "/> <TextBlock Text="{Binding Cstyle}"/> </StackPanel> </StackPanel> <StackPanel Grid.Column="1" VerticalAlignment="Stretch"> <TextBlock Text="Available Styles"/> <ListView x:Name="styleList" Height="135" > <GridView> <GridViewColumn DisplayMemberBinding="{Binding sCode}" Header="Name"/> <GridViewColumn DisplayMemberBinding="{Binding sColor}" Header="Color"/> </GridView> </ListView> </StackPanel> </Grid> </Border> </DataTemplate> </DataGrid.RowDetailsTemplate> </DataGrid> </Grid> </Window> 这是我的隐藏代码: using System.Collections.Generic; using System.Windows; namespace TestWPF { /// <summary> /// Logica di interazione per MainWindow.xaml /// </summary> public partial class MainWindow : Window { public List<GridElement> GridList { get; set; } public MainWindow() { InitializeComponent(); GridList = new List<GridElement> { new GridElement { Code = "ABC", Description = "Description for ABC", Cstyle = "Current style ABC", AvailableStyles = new List<Styles> { new Styles() { sCode = "Styletest1-ABC", sColor = "blue" }, new Styles() { sCode = "Styletest2-ABC", sColor = "red" } } }, new GridElement { Code = "DEF", Description = "Description for DEF", Cstyle = "Current style DEF", AvailableStyles = new List<Styles> { new Styles() { sCode = "Styletest1-DEF", sColor = "white" }, new Styles() { sCode = "Styletest2-ABC", sColor = "black" } } } }; TestDataGrid.ItemsSource = this.GridList; } } public class GridElement { public string Description { get; set; } public string Code { get; set; } public string Cstyle { get; set; } public List<Styles> AvailableStyles { get; set; } } public class Styles { public string sCode { get; set; } public string sColor { get; set; } } } 但结果就是图中的样子。 这就是结果 我需要的是rowdetail中的listview根据我选择的主网格的行而变化。 因此,如果我单击第一行,我将看到列表视图中列出的 ABC 样式(即颜色,但显示什么并不重要),如果单击第二行,也会看到相同的样式。 谢谢您的帮助 解决方案 我报告我找到的问题解决方案,仅供参考: <ListView x:Name="styleList" Height="135" ItemsSource="{Binding AvailableStyles}" > <ListView.View> <GridView> <GridViewColumn DisplayMemberBinding="{Binding sCode}" Header="Name"/> <GridViewColumn DisplayMemberBinding="{Binding sColor}" Header="Color"/> </GridView> </ListView.View> </ListView> 您的代码几近完美。但是,发生这种情况是因为未设置 ListView 的 ItemsSource 属性,并且缺少 ListView.View 元素。以下是处理和解决此问题的方法。 绑定 ItemsSource 属性 ItemsSource 属性对于使用数据填充 ListView 至关重要。在您的情况下,您希望 ListView 显示每个 GridElement 的可用样式。通过将 ListView 的 ItemsSource 绑定到AvailableStyles 属性,您可以确保每行显示正确的数据。 通过设置 ItemsSource="{BindingAvailableStyles}",您可以告诉 ListView 使用当前 GridElement 中的AvailableStyles 集合作为其数据源。如果没有这个,ListView就没有数据可显示。 定义ListView.View ListView.View 属性对于定义要在 ListView 中显示的数据的布局和列是必需的。在本例中,GridView 用于定义 sCode 和 sColor 的列。 ListView.View 元素(特别是 GridView)定义 ListView 中每个项目的显示方式。它指定每个项目应显示两列:一列用于 sCode,一列用于 sColor。如果没有这个,ListView 将不知道如何渲染数据。 最终结果 最终的 WPF 将如下所示: <ListView x:Name="styleList" Height="135" ItemsSource="{Binding AvailableStyles}"> <ListView.View> <GridView> <GridViewColumn DisplayMemberBinding="{Binding sCode}" Header="Name"/> <GridViewColumn DisplayMemberBinding="{Binding sColor}" Header="Color"/> </GridView> </ListView.View> </ListView> 还有这样的应用程序: 我希望这有帮助!如果您还有任何疑问,请随时询问。
无法绑定到“ngModel”,因为它不是“textarea”的已知属性 组件.html 无法绑定到“ngModel”,因为它不是“textarea”的已知属性 组件.html <textarea rows="6" [(ngModel)]="enteredValue"></textarea> <button (click)="onSavePost()">save</button> <p>{{ newPost }}</p> 组件.ts import { Component } from '@angular/core'; @Component({ selector: 'app-post-create', standalone: true, templateUrl: './post-create.component.html', styleUrl: './post-create.component.css' }) export class PostCreateComponent { newPost="NO content Here"; enteredValue=''; onSavePost(){ this.newPost = this.enteredValue; } } app.component.ts import { Component } from '@angular/core'; import { RouterOutlet } from '@angular/router'; import { PostCreateComponent } from './post/post-create/post-create.component'; import { FormsModule } from '@angular/forms'; @Component({ selector: 'app-root', standalone: true, imports: [RouterOutlet,FormsModule,PostCreateComponent], templateUrl: './app.component.html', styleUrl: './app.component.css' }) export class AppComponent { title = 'Project_ng_demo'; } 这里不是 agnular 18 中的 app.module.ts 文件 在app.component.ts中导入FormsModule。 从 '@angular/forms' 导入 { FormsModule }; 问题是,当使用独立组件时,子组件不会自动从父组件获取导入,因此 PostCreateComponent 也需要导入 FormsModule。 import { Component } from '@angular/core'; import { FormsModule } from '@angular/forms'; @Component({ selector: 'app-post-create', standalone: true, imports: [FormsModule], templateUrl: './post-create.component.html', styleUrl: './post-create.component.css' }) export class PostCreateComponent { newPost="NO content Here"; enteredValue=''; onSavePost(){ this.newPost = this.enteredValue; } }
我正在尝试使用带有数据绑定的 adView 的包含布局。但是,它给我一个错误: java.lang.IllegalStateException:必须在调用 loadAd 之前设置广告尺寸和广告单元 ID。 ...
唯一级别 = [级别 0、级别 1、级别 2] 样本输入 = [{name:"Level 0",data:[{name:"Job A",y: 0.26},{name:"Job B",y: 0.36}]}, {名称:“1 级”,数据:[{na...
在 Observable 集合中添加和删除项目时,出现 ObjectDispose 异常。 添加 如果我向集合中添加一个新项目,它工作正常,但如果我尝试添加第二个......
使用 MVVM 将 ObservableCollection 绑定到 ListView
我在尝试将 Observable Collection 绑定到 ListView 控件时遇到问题。我不确定我的设计模式是否正确。我将用户列表存储在视图模型中作为 ObservableCollect...
在WPF中,有没有办法声明祖先的DataContext的类型?
在用户控件中,我使用RelativeSource 绑定到托管窗口的DataContext 的命令。我已使用 d:DataContext 在 User
在我的数据网格中有一列,其中有进度条,当我引用给定数据网格中的特定行时,每个进度条都必须独立于其他进度条进行更改。 当尝试引用
我有一个相当简单的组件,如下所示: 示例文本 ... 我有一个相当简单的组件,如下所示: <form> <div class="form-group"> <label for="sampleText">Sample Text</label> <input type="text" class="form-control" id="sampleText" aria-describedby="sampleTextHelp" placeholder="Enter a text" @bind="@Value" /> <small id="sampleTextHelp" class="form-text text-muted">Enter a text to test the databinding</small> </div> </form> <p>You entered here: @Value</p> @code { [Parameter] public string Value { get; set; } } 我现在将其添加到这样的页面中: <MVVMTest Value="@_value" /> <p> You entered in MVVMTest: @_value </p> @functions { private string _value; } 当我在输入字段中输入文本时,它会在 您在此处输入: 正确更新,但不会传播到 *您在 MVVMTest 中输入”: 我需要做什么才能正确传播它? 我可以考虑将一个 Action<string> 作为第二个 [Parameter] ,当文本更改时我会在组件内触发它,但这似乎是一种黑客和迂回的方式。是必须这样做吗,还是有更好的方法? 后续1 Issac 的答案不起作用,因为它用 @bind-value:oninput="@((e) => ValueChanged.Invoke(e.Value))" 绊倒了 Cannot convert lambda expression to type 'object' because it is not a delegate type。 我不得不用这种迂回的方式来做: <form> <div class="form-group"> <label for="sampleText">Sample Text</label> <input type="text" class="form-control" id="sampleText" aria-describedby="sampleTextHelp" placeholder="Enter a text" @bind="@Value" /> <small id="sampleTextHelp" class="form-text text-muted">Enter a text to test the databinding</small> </div> </form> <p>You entered here: @Value</p> @code { private string _value; [Parameter] public string Value { get => _value; set { if(Equals(value, _value)) { return; } _value = value; OnValueChanged.InvokeAsync(value).GetAwaiter().GetResult(); } } [Parameter] public EventCallback<string> OnValueChanged { get; set; } } 并像这样使用它: @inject HttpClient http @page "/test" <div class="top-row px-4"> Test Page </div> <div class="content px-4"> <MVVMTest Value="@_value" OnValueChanged="@(v => _value = v)" /> <p> You entered in MVVMTest: @_value </p> </div> @functions { private string _value; } 不漂亮,但有效。我的“真实”组件更加复杂,因为更改的值会触发对底层 ASP.net Core 服务的调用,因此我必须仔细检测谁更改了内容以避免无限循环。 如果 Blazor 支持类似 XAML/WPF 的 MVVM,那肯定会更好...... 后续2 我回到 Issac 的解决方案,并通过额外的演员,我让它工作了: <form> <div class="form-group"> <label for="sampleText">Sample Text</label> <input type="text" class="form-control" id="sampleText" aria-describedby="sampleTextHelp" placeholder="Enter a text" value="@Value" oninput="@((Func<ChangeEventArgs, Task>)(async e => await OnValueChanged.InvokeAsync(e.Value as string)))" /> <small id="sampleTextHelp" class="form-text text-muted">Enter a text to test the databinding</small> </div> </form> <p>You entered here: @Value</p> @code { private string _value; [Parameter] public string Value { get; set; } [Parameter] public EventCallback<string> OnValueChanged { get; set; } } 用途: <MVVMTest Value="@_value" OnValueChanged="@(v => _value = v)" /> <p> You entered in MVVMTest: @_value </p> @functions { private string _value; } 这已经是 Blazor 中的一个已知问题。上周我已经被这个问题绊倒了,我也在 VS 开发者论坛发布了解决方法。 您需要添加一个 EventCallback 参数来执行此操作: @code { [Parameter] public string Value { get; set; } [Parameter] public EventCallback<string> ValueChanged { get; set; } } 阅读与组件参数绑定部分。
我有以下属性,但在更改 ui 中的 TextBox 文本时不会调用该集合,OnTextChanged 确实会被调用。 私有字符串_name; [必需的] 公共字符串
CheckedListBox控件有类似Properties的“DisplayMember”和“ValueMember”吗? C# winforms
我的数据表具有以下结构: 身份证 |价值 ---------------- 1 |项目1 2 |项目2 3 |项目3 我通过 ad 将 DataTable 中的值显示到 CheckedListBox 控件中...
努力将表从 ADO.Net 数据库模型绑定到位于 WPF 应用程序的 ListView 内的 ComboBox
我正在为我的毕业项目编写简单的任务管理系统,并坚持将 SQL 表数据绑定到 GridView 中包含的 ComboBox 元素,该元素按顺序包含在
我有一个场景,我希望能够在 UI 中收集字符串数组...视图模型不应该关心如何收集字符串...并将该字符串数组传递给视图模型.. .
我有一个 EntityDisplay 类,其中包含 2 个属性: 公共密封类 EntityDisplayObject { 公共 ICollection 集合 { 获取;私人套装; } 公共字符串集合名称{获取;
我想了解具有两个值的枚举如何将它们显示在具有相关复选框的列表框中了解它们是否被选中 这是代码: 公共枚举类型 { 类型_A,
detectChanges() 在 Angular 独立组件测试中不起作用
我为一个简单组件编写了一个组件测试,该组件仅显示属性名称的输入字段。 在组件测试中,我将组件的输入属性名称设置为“Stephan”并且...
如何将ListBoxItem.IsSelected绑定到ViewModel中的属性?
我想做与有问题相同的事情 如何将 ListBoxItem.IsSelected 绑定到布尔数据属性,但使用 Avalonia 而不是 WPF。 给定这个 ViewModel 公共部分类 MainViewModel :
如何将 ListBoxItem.IsSelected 绑定到 AVALONIA 中 ViewModel 中的属性?
我想做与有问题相同的事情 如何将 ListBoxItem.IsSelected 绑定到布尔数据属性,但使用 Avalonia 而不是 WPF。 需要特别说明的是:上面链接的解决方案适用...
我有一个名为 CountBubble 的 ContentView: 我有一个 ContentView 叫做 CountBubble: <ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="CleanApp.ContentViews.CountBubble" BindingContext="{Binding Source={RelativeSource Self}}"> <Border StrokeShape="RoundRectangle 5,5,5,5" StrokeThickness="1" BackgroundColor="LightGray" Opacity=".65" HeightRequest="20"> <Label x:Name="CountText" Text="{Binding Count}" FontSize="12" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" Padding="0"/> </Border> </ContentView> public partial class CountBubble : ContentView { public static readonly BindableProperty CountProperty = BindableProperty.Create("Count", typeof(Int32), typeof(CountBubble), 0, BindingMode.TwoWay, propertyChanged: OnCountPropertyChanged); private static void OnCountPropertyChanged(BindableObject bindable, object oldvalue, object newvalue) { var countBubble = (CountBubble)bindable; countBubble.CountText.Text = newvalue.ToString() ?? "0"; } public Int32 Count { get => (Int32)GetValue(CountProperty); set => SetValue(CountProperty, value); } public CountBubble() { InitializeComponent(); } } 我是这样吃的: <Label x:Name="Title" Text="{Binding MenuItem.Count}" Grid.Column="2" VerticalTextAlignment="Center" /> <contentViews:CountBubble x:Name="CountBubble" Grid.Column="4" Count="{Binding MenuItem.Count}" /> 标题字段中显示正确的数字,但计数气泡中仅显示 0。 如果我更改 CountBubble 来定义计数,如下所示: <contentViews:CountBubble x:Name="CountBubble" Grid.Column="4" Count="4" /> CountBubble 显示为 4。 当 CountBubble.Count 设置为绑定 (Count="{Binding MenuItem.Count}") 时,setter 上的断点和 OnCountPropertyChanged 永远不会被命中。 我没有注意到,BindableProperty有问题,但仍然打开。 我通常将我的 CustomControls 绑定到 ViewModel 此解决方法经过测试并且按预期工作 替换: <ContentView ... BindingContext="{Binding Source={RelativeSource Self}}"> 与: <ContentView ... BindingContext="{Binding Source={RelativeSource AncestorType={x:Type local:CountBubble}}}"> 替换: <contentViews:CountBubble x:Name="CountBubble" Grid.Column="4" Count="{Binding MenuItem.Count}" /> 与: <contentViews:CountBubble x:Name="CountBubble" Grid.Column="4" Count="{Binding MenuItem.Count, Source={RelativeSource AncestorType={x:Type ViewModels:MyViewModels}}}" /> 更改 ViewModels:MyViewModels为你的namespace:Class