multibinding 相关问题

MultiBinding是Microsoft .NET WPF中的XAML标记,使您可以将多个数据源组合到可用于数据绑定的单个数据集合中。

如何使用 MultiBinding 在上下文菜单中隐藏分隔符?

我在 wpf 树视图上使用上下文菜单,我几乎就可以实现我想要的。在解释问题之前,让我先解释一下上下文菜单的 XAML 定义的作用。 对于每个

回答 3 投票 0

WPF:多重绑定未使用 OnPropertyChanged 进行更新?

我有一个转换器,它接受一个 bool 值,并根据它的真假返回 A 或 B。转换器根据布尔值选择正确的值,但仅在开始时,如果我改变......

回答 1 投票 0

WPF 多绑定按钮。已启用文本框

我是 WPF 的新手,我在网上找不到解决方案。我的问题是我希望仅当四个文本框没有有效性错误时才启用我的按钮。 我的代码是: 我是 WPF 的新手,我在网上找不到解决方案。我的问题是我希望仅当四个文本框没有有效性错误时才启用我的按钮。 我的代码是: <Button Content="Action" Click="Action_Click" > <Button.IsEnabled> <MultiBinding Converter="{StaticResource ValCon}"> <Binding ElementName="textBox1" /> <Binding ElementName="textBox2"/> <Binding ElementName="textBox3"/> <Binding ElementName="textBox4"/> </MultiBinding> </Button.IsEnabled> </Button> 我的多值转换器是这样的: class ValidityConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) { bool b = true; foreach (var x in values) { TextBox y = x as TextBox; if (Validation.GetHasError(y)) { b = false; break; } } return b; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } } 我注意到这只在开始时有效。当用户修改其中一个文本框时,它不会。我的值转换器是否需要实施 INotifyPropertyChange?在 WPF 中做这样的事情的正确解决方案是什么?感谢您的帮助。 编辑 我已经做过这样的事情并且它正在工作: <Button Click="Button_Click" > <Button.Style> <Style TargetType="Button"> <Setter Property="IsEnabled" Value="False"/> <Style.Triggers> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding Path=(Validation.HasError), ElementName=textBox}" Value="False"/> <Condition Binding="{Binding Path=(Validation.HasError), ElementName=textBox1}" Value="False"/> <Condition Binding="{Binding Path=(Validation.HasError), ElementName=textBox2}" Value="False"/> <Condition Binding="{Binding Path=(Validation.HasError), ElementName=textBox3}" Value="False"/> </MultiDataTrigger.Conditions> <Setter Property="IsEnabled" Value="True"/> </MultiDataTrigger> </Style.Triggers> </Style> </Button.Style> </Button> 我所做的是使用您的 MultiTrigger 解决方案,但在我的情况下,我希望仅当 3 个文本框的长度为零时才激活按钮,因此我的解决方案适用于以下代码.. <Button.Style> <Style TargetType="Button"> <Setter Property="IsEnabled" Value="True"/> <Style.Triggers> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding Path=Text.Length, ElementName=activationKeyTextbox}" Value="0"/> </MultiDataTrigger.Conditions> <Setter Property="IsEnabled" Value="False"/> </MultiDataTrigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding Path=Text.Length, ElementName=serialDayStartbox}" Value="0"/> </MultiDataTrigger.Conditions> <Setter Property="IsEnabled" Value="False"/> </MultiDataTrigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding Path=Text.Length, ElementName=serialNumdaysbox}" Value="0"/> </MultiDataTrigger.Conditions> <Setter Property="IsEnabled" Value="False"/> </MultiDataTrigger> </Style.Triggers> </Style> </Button.Style> 我不会实现 IMultiValueConverter,因为我们在这里没有转换任何东西。 BindingGroup 可以满足您的目的。 使用 MVVM/INotifyPropertyChanged 的同样有效的方法如下:- 将按钮的 IsEnabled 属性绑定到布尔属性(比如 IsValid)。 将所有文本框绑定到不同的属性。 OnPropertyChange 任何这些文本框,调用一个通用函数(比如 Validate()) IsValid 可以根据 Validate() 设置为 true 或 false,这将依次切换(启用/禁用)按钮的状态。 我知道这是旧的,但我有类似的需求,不想编写绑定组和验证...注意这是我的第一个 wpf 应用程序,也是第一次使用 mvvm! <Button Name="AddBtn" Content="Add" Grid.Row="2" Grid.Column="2" Height="30" Width="100" Command="{Binding AddCmd}" CommandParameter="{Binding Pending}" > <Button.IsEnabled> <MultiBinding Converter="{StaticResource multiButtonEnabled}" > <Binding ElementName="tb1" Path="(Validation.Errors)[0]" /> <Binding ElementName="tb2" Path="(Validation.Errors)[0]" /> <Binding ElementName="tb3" Path="(Validation.Errors)[0]" /> </MultiBinding> </Button.IsEnabled> </Button> 转换器看起来像这样 [ValueConversion(typeof(ValidationError), typeof(bool))] class TxtBoxMultiEnableConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { int i=0; foreach (var item in values) { if (item as ValidationError != null) { i++; } } if (i!=0) { return false; } return true; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) { throw new NotSupportedException(); } } 我正在使用 IDataErrorInfo 来捕获模型中的错误,并绑定到一个双精度数。 WPF 很好,在绑定时会为您抛出解析错误,但它们并没有真正为您提供挂钩它们以更改显示给用户的消息或为您提供一个属性来检查是否有错误标记的方法很烦人,但这使您可以捕获解析中的错误,而不必检查验证规则中的解析错误。我敢肯定我的无知正在表现出来,但我们都必须从某个地方开始! 正如迈克所说,文本框没有改变。 您可能应该绑定 textbox.Text 属性。 在你的例子中: <Button Content="Action" Click="Action_Click" > <Button.IsEnabled> <MultiBinding Converter="{StaticResource ValCon}"> <Binding ElementName="textBox1" Path="Text"/> <Binding ElementName="textBox2" Path="Text" /> <Binding ElementName="textBox3" Path="Text"/> <Binding ElementName="textBox4" Path="Text"/> </MultiBinding> </Button.IsEnabled> </Button> 免责声明 这是我的第一个 StackOverflow 答案,所以它可能不准确或需要调整以遵循 StackOverflow 协议。 至于这条评论:https://stackoverflow.com/a/23504690/14654255(无法直接评论) 我已经尝试使用这个建议;但是,没有另一种机制来手动更新 MultiBinding 是不够的。 我的建议是: FormConverter.cs: using System; using System.Globalization; using System.Windows; using System.Windows.Controls; using System.Windows.Data; namespace WpfApp.Converters { /// <summary> /// This class will be used to determine whether the form submission button should be enabled /// </summary> [ValueConversion(typeof(Control), typeof(bool))] public class FormConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { foreach (Control control in values) { //Relevant inside the scope of the current iteration only string text = null; //Any validation error if (Validation.GetHasError(control)) return false; //No value selected if (control is DatePicker datePicker) if (datePicker.SelectedDate == DateTime.Today) return false; else continue; if (control is ComboBox comboBox) if (comboBox.SelectedIndex == -1) return false; else continue; //Left blank if (control is TextBox textBox) text = textBox.Text; else if (control is PasswordBox passwordBox) text = passwordBox.Password; if (text != null && text.Length == 0) return false; } return true; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotSupportedException(); } } } MainWindow.xaml.cs: using System.Windows; using System.Windows.Controls; using System.Windows.Data; namespace WpfApp { class MainWindow : Window { private MultiBindingExpression buttonBinding = null; public MainWindow() { InitializeComponent(); buttonBinding = BindingOperations.GetMultiBindingExpression(button, button.IsEnabledProperty); } private void UpdateButton(object sender, RoutedEventArgs e) { if (registerButtonBinding == null) return; buttonBinding.UpdateTarget(); } } } MainWindow.xaml: <Window x:Class="WpfApp.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:converters="clr-namespace:WpfApp.Converters"> <Window.Resources> <converters:formConverter x:Key="formConverter"/> </Window.Resources> <StackPanel HorizontalAlignment="Center"> <TextBlock Text="First name"/> <TextBox x:Name="firstNameTextBox"/> <Button x:Name="button"> <Button.IsEnabled> <MultiBinding Converter="{StaticResource formConverter}"> <Binding ElementName="firstName"/> </MultiBinding> </Button.IsEnabled> </Button> </StackPanel> </Window> 来源: https://stackoverflow.com/a/23504690/14654255 https://stackoverflow.com/a/19356651/14654255 https://stackoverflow.com/a/5676257/14654255

回答 5 投票 0

带有自定义限定符的匕首多重装订器。

我有一个名为SettingHandler的接口,它负责处理与Android应用内部特定设置相关的事件。 接口SettingHandler { fun onHandleEvent(....

回答 1 投票 0


wpf组合框多重绑定在第一步中无法获得相对源组合框的组合框项目(以编程方式添加或绑定到数据库)

我想通过特定条件禁用组合框的某些项目。对于此问题,我使用了多重绑定。如果我在xaml中描述了combobox的所有项目,那就没有问题。但是我想填充组合框...

回答 1 投票 0

是否可以在WPF的MultiBinding QuickConverter中使用带参数的经典转换器?

是否可以在WPF中将带有参数的经典转换器与QuickConverter MultiBinding一起使用?更清楚地说,我想绑定TextBlock的Text属性以显示这样的文本:

回答 1 投票 1

WPF组框标题中的多绑定

我想为我的组框的标题实现多重绑定。这是我目前的做法: ... [

回答 1 投票 0

在WPF中多重绑定到两个不同的DataContext

在MultiBinding中,如果DataContext设置为VM1,并且C是该属性的属性,是否可以将第二个绑定绑定到另一个不同的DataContext(如VM2)并将其绑定到VM2中的D属性?

回答 2 投票 1

匕首2集多重绑定不适用于Kotlin中的SimpleEntry吗?

下面的多重绑定有效,当提供对作为IntoSet @Provides @IntoSet fun entryOne()时:Pair {val key = randomStringGenerator()val value =“ ...

回答 1 投票 0

在命令参数中发送当前项目和复选框值

我有一个带有HierarchialDataTemplate的TreeView设置。它的ItemsSource绑定到我的视图模型中的Overlay对象的集合,其中每个Overlay都有一个Layer对象的集合(因此...

回答 1 投票 0

WPF:DataTrigger多属性条件

所以我有这个DataTrigger:

回答 1 投票 0

Multibinding生成“无法设置MultiBinding,因为必须指定MultiValueConverter”

我有一个带绑定的按钮,工作正常,见下文:

回答 2 投票 4

ConverterParameter与Multibinding上的绑定

是否可以在MultiBinding中将Converter绑定添加到ConverterParameter?像这样的东西:

回答 2 投票 9

MultiDataTrigger与具有多重绑定的DataTrigger

我遇到过一种情况,我可以通过使用MultiDataTrigger轻松实现相同的功能,或者使用带有MultiBinding的DataTrigger。是否有任何实质性的理由......

回答 2 投票 27

绑定到属性的WPF按钮Convertback IMultiValueConverter不更新值

我在后面的代码中连接了一个切换按钮。我想将isChecked状态从一个按钮绑定到4个视频控件以切换静音功能。我正在使用multibinding绑定...

回答 1 投票 0

是否可以将MultiBinding的targetType传递给子绑定的转换器?

我们有一个奇怪的例子,一个用作MultiBinding的子节点的Binding需要它的Converters Convert方法来知道MultiBinding绑定的最终数据类型。对于常规绑定...

回答 1 投票 -2

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