data-binding 相关问题

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

错误 XFC0045 - 如何将 CarouselView 绑定到毛伊岛的 ObservableCollection?

我正在尝试将 ObservableCollection 绑定到 。在 CarouselView 中,我有一个 ,我试图将其绑定到 ObservableCollection 中的公共属性。嗬...

回答 1 投票 0

我无法多次导航到第二页

我正在使用外壳导航,我尝试通过菜单从主页导航到第二页。第一次使用没有问题,但是当我返回到第一个屏幕广告时,尝试转到...

回答 1 投票 0

如何在xaml文件中访问ObservableCollection<Object>的字段

我正在尝试在 MAUI xaml 文件上打印我的列表的标题,但标题没有出现。我想访问标题字段和其中的其他字段。我正在使用它们来打印待办事项列表。 这是我的 xaml ...

回答 1 投票 0

将可绑定属性与命令同步

有没有办法在属性以指定的绑定延迟发生变化时执行命令? 作为示例,让我们使用具有 IsChecked 属性且 Delay=1000(1 秒)的 CheckBox 和调用...的 Command

回答 1 投票 0

如何为数据绑定组合框预定义组合框项?

我想允许用户选择串口的波特率。 我创建了一个与串口波特率绑定的文本框,如下所示,它可以工作。 我想允许用户选择串口的波特率。 我创建了一个与串口波特率绑定的文本框,如下所示,它可以工作。 <TextBox x:Name="tbbaudRate" Text="{Binding SerialPort.BaudRate}" /> 我的问题是,有效波特率的设置是有限的。有效波特率为 { 75, 110, 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 }。我想将文本框更改为列出有效波特率值的组合框。 这就是我所做的。 <ComboBox x:Name="tbbaudRate" Text="{Binding SerialPort.BaudRate}" > <ComboBoxItem Content="75"/> <ComboBoxItem Content="110"/> <ComboBoxItem Content="300"/> <ComboBoxItem Content="1200"/> <ComboBoxItem Content="2400"/> <ComboBoxItem Content="4800"/> <ComboBoxItem Content="9600"/> <ComboBoxItem Content="19200"/> <ComboBoxItem Content="38400"/> <ComboBoxItem Content="57600"/> <ComboBoxItem Content="115200"/> </ComboBox> 虽然这有效,但我几乎没有问题。 当我第一次加载窗口时,未选择波特率的默认值(9600)。 这看起来不太优雅。实现这一目标的最佳方法是什么? 供参考,这是我的串口类。也像上面的代码一样丑陋。我使用 resharper 自动生成 notificationpropertychange 代码。 class SerialComm : INotifyPropertyChanged { private int[] ValidBaudRate = new[] { 75, 110, 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 }; //Dont know how to use this private int[] ValidDataBits = new[] { 5, 6, 7, 8, 9 }; //Dont know how to use this private SerialPort _serialPort; public SerialComm() { _serialPort = new SerialPort(); } public SerialPort SerialPort { get { return _serialPort; } set { _serialPort = value; OnPropertyChanged("SerialPort"); SerialPort.GetPortNames(); } } #region Autogenerate by resharper public event PropertyChangedEventHandler PropertyChanged; [NotifyPropertyChangedInvocator] protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); } #endregion } 像这样改变你的组合框: <ComboBox Name="comboBox1" Width="120" ItemsSource="{Binding Path=ValidBaudRateCollection}"> <ComboBox.ItemTemplate> <DataTemplate> <Label Content="{Binding }"/> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> 将这些添加到您的SerialComm课程中: public ObservableCollection<int> ValidBaudRateCollection; public SerialComm() { this.ValidBaudRateCollection = new ObservableCollection<int>(this.ValidBaudRate); _serialPort = new SerialPort(); } 最后将它们添加到您的Window中的某个位置(例如构造函数) SerialComm s = new SerialComm(); comboBox1.DataContext = s; comboBox1.ItemsSource = s.ValidBaudRateCollection; comboBox1.SelectedIndex = 6; 注意: 这样您就可以绑定组合框值,但是将 ObservableCollection 添加到似乎位于另一层的类中可能在架构上不正确。 要使“9600”成为默认波特率,您需要添加以下行 myComboBox.SelectedIndex = 7; 9600 排在第七位 希望有帮助... 旧线程,但让我走上了正轨: 通过添加 SelectedValuePath="Content" 并将其保存到 SelectedValue 来解决它。 <ComboBox SelectedValue="{Binding LaserBaudRate, UpdateSourceTrigger=PropertyChanged}" SelectedValuePath="Content"> <ComboBoxItem Content="75" /> <ComboBoxItem Content="110" /> <ComboBoxItem Content="300" /> <ComboBoxItem Content="1200" /> <ComboBoxItem Content="2400" /> <ComboBoxItem Content="4800" /> <ComboBoxItem Content="9600" /> <ComboBoxItem Content="19200" /> <ComboBoxItem Content="38400" /> <ComboBoxItem Content="57600" /> <ComboBoxItem Content="115200" /> </ComboBox> 只需添加: private int selectedBaudRate; public Constructor() { SelectedBaudRate = Properties.Settings.Default.SelectedBaudRate; } public int SelectedBaudRate { get => selectedBaudRate; set { if (value != selectedBaudRate) { OnPropertyChanging(); selectedBaudRate = value; Properties.Settings.Default.SelectedBaudRate = value; OnPropertyChanged(); } } } <ComboBox Width="80" ItemsSource="{Binding AvailableBaudRate}" SelectedValue="{Binding SelectedBaudRate, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" />

回答 4 投票 0

禁用“文档查看器”中的“打印”按钮

我想禁用有问题的按钮。 我的代码是: 和预......

回答 1 投票 0

如何在 C# 标记中将一个视图直接绑定到另一个视图(没有 xaml,没有 ViewModel/代码隐藏)

这看起来确实是一件简单的事情,但我无法弄清楚。 我不使用 xaml、纯 C# 标记来创建视图。 我有一个 DataTemplate,我可以轻松地将视图绑定到并形成 ViewModel 代码......

回答 1 投票 0

UWP,<Button.IsEnabled><Binding.Source><Binding.Converter>

在 UWP 项目中,我无法像 WPF 中那样访问 IMultiValueConverter。 然后我尝试在 UWP 中实现类似的东西。 这是我正在做的方式: //--------------------------------- 酒吧...

回答 1 投票 0

如何在 XAML 中格式化 TimeSpan

我正在尝试格式化绑定到 TimeSpan 属性的文本块。如果该属性的类型为 DateTime,则该方法有效,但如果该属性的类型为 TimeSpan,则该方法失败。我可以使用转换器来完成它。但我是

回答 12 投票 0

Livewire/Bootstrap - 在显示 Livewire/Bootstrap 模态之前向输入传递值问题

我有两个不同的按钮应该触发模式的打开($('#create-ponto-atipico').modal('show');)。根据单击的按钮,我需要将不同的值传递给 in...

回答 1 投票 0

更新 WPF 中动态创建的 DataGrid

我正在开发一个 WPF 应用程序,并创建了两个数据网格,如附图所示。第二个数据网格是使用 CreateCoachCompositionDataGrid() 方法动态创建的。 T...

回答 1 投票 0

[jQuery]数据数组绑定

我对包含在数据属性中的数组绑定有疑问。 场景: 我...

回答 1 投票 0

控件模板中的 WPF XAML 菜单绑定

我有一个自定义菜单,其中的 ItemsSource 绑定到我的视图模型中的 ObservableCollection。为了自定义菜单,我在样式中使用 ControlTemplate,并且 ControlTemplate 包含一个实验室...

回答 1 投票 0

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

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