我将转换器从IValueConverter更改为IMultiValueConverter:之前我将int转换为字符串:
[ValueConversion(typeof(int), typeof(string))]
Run Code Online (Sandbox Code Playgroud)
但现在我将int和double转换为字符串.
我该如何指定我的ValueConversion attribut?我现在有两个输入和一个输出.
我编写了一个MultiValueConverter,它检查给定列表是否包含给定值,如果有,则返回true.我用它来绑定自定义复选框列表.现在我想编写ConvertBack方法,这样如果选中复选框,原始值将被发送到模型.有没有办法在ConvertBack方法中访问值?
XAML:
<ListBox.ItemTemplate>
<HierarchicalDataTemplate>
<CheckBox Content="{Binding Path=Description}">
<CheckBox.IsChecked>
<MultiBinding Converter="{x:Static Classes:ListContainsMultiConverter.Instance}">
<Binding Path="Id" />
<Binding Path="DataContext.ContactTypes" RelativeSource="{RelativeSource AncestorType={x:Type Window}}" />
</MultiBinding>
</CheckBox.IsChecked>
</CheckBox>
</HierarchicalDataTemplate>
</ListBox.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)
当我绑定时,我得到了正确的结果但是有没有办法在转换回来时获得绑定的id?我想要实现的是,如果取消选中复选框,则将从列表中删除该值,如果选中该值,则该值将添加到列表中.
我有以下代码:
<DataGridTemplateColumn Header="Security">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Name="Security" Content="{Binding Path=totalSecurities}" Command="{Binding Source={StaticResource viewModel}, Path=filterGridCommand}">
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource PassThroughConverter}">
<Binding Path="sector"/>
<Binding ElementName="Security" Path="Name"/>
</MultiBinding>
</Button.CommandParameter>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)
以下是PassThroughConverter的代码:
public class PassThroughConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameters, CultureInfo culture)
{
return values;
}
public object[] ConvertBack(object value, Type[] targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
当我在命中返回值行时调试,正确的值在数组中,但是当我按下触发filtergrid命令的按钮时,返回的值都是null?谁能帮忙.谢谢.
我正在编写一个包含两个绑定的 MultiBinding - 每个都返回一个布尔值。使用 MultiBindings 您需要指定一个 IMultiValueConverter。在我的情况下,这个转换器应该接受两个布尔值并返回它们的 AND。这写起来真的很简单,但我必须这样做吗?这感觉就像是最基本的 MultiValueConverter,如果 .NET 中已经存在一个,我不想写一个。
那么——在吗?如果是这样 - 有哪些内置的 IMultiValueConverters ?
我正在开发票系统,我正在使用DataGridfor item条目.我希望用户能够以不同的单位(例如英寸,英尺,米)输入数量,并将输入的数量转换为项目的库存单位.我的第一个想法是实现一个IMultiValueConverter,但我从昨天起就一直在努力,无法弄明白.
我的转换方法肯定是有效的,我实际上已经采取了身体,将其粘贴在另一种方法中并测试其输出.我的程序在ConvertBack方法中崩溃,我是C#的新手,我从未见过有人实际实现过该方法,所以我想知道为什么它迫使我实现它(我猜它是因为我的数量绑定不是单程),但我实际上需要转换后的值返回源对象Quantity属性.
我实际上没有问题ConvertBack,但是传递给方法的value参数是用户输入的值,而不是转换后的值,为什么呢?如果它不是转换后的值,那么由于这个原因,我无法弄清楚如何倒退,因为我只能访问用户输入的内容,而不能访问该方法中所需的单位.
我意识到我对转换器的理解可能已经过时了,但是如果有人可以帮助我理解我的想法在哪里,我会很感激,以及我的问题的任何潜在的解决方法/解决方案.
提前致谢!
页/ PurchaseInvoicePage.xaml
<DataGrid x:Name="ItemsGrid" Grid.Row="2" Grid.ColumnSpan="3" PreviewKeyDown="ItemsGrid_PreviewKeyDown" ItemsSource="{Binding Items}" FontSize="11" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" RowHeaderWidth="0" GridLinesVisibility="None" CanUserResizeRows="False" CanUserResizeColumns="False" CanUserReorderColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn x:Name="ItemNoColumn" Width="150" Header="Item No." IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBox Cursor="Arrow" Width="130" BorderThickness="0" Background="Transparent" IsReadOnly="True" Text="{Binding Number}" />
<Image Cursor="Hand" MouseDown="ItemSelectionButton_Click" Width="12" Source="/Images/Icons/SearchBlack.png" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<!-- question relative xaml starts here -->
<DataGridTextColumn x:Name="QuantityColumn" Width="70" Header="Quantity">
<DataGridTextColumn.Binding>
<MultiBinding Converter="{StaticResource unitConverter}">
<Binding Path="Quantity" /> …Run Code Online (Sandbox Code Playgroud) 我已经知道可以从IValueConverter实现返回的Binding.DoNothing,表示不应该进行其他操作.
但是,我找不到一个很好地总结的参考或文档,其他特殊值是什么 - 比如返回后备值.这些是什么?
我们目前正在将项目从3.5版转换为.NET 4.5版.
我们设置了一个文本框IsEnabled,它使用多绑定转换器进行多重绑定.每个绑定都有自己的转换器.
一切都在.NET 3.5中运行良好,但在.NET 4.5中,传递给子转换器的目标类型是object类型而不是bool.
这是一个已知的问题?MS重构多重绑定,不将目标类型传递给子转换器.
我创建了一个简化的项目来演示这个问题.我在VS2008中创建了项目,然后将其转换为VS2012和.NET 4.5.
窗口XAML:
<Window x:Class="TestMultiBinding.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestMultiBinding"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<local:NotConverter x:Key="NotConverter"/>
<local:MultiBoolConverter x:Key="MultiBoolConverter"/>
</Window.Resources>
<StackPanel>
<TextBox>
<TextBox.IsEnabled>
<MultiBinding Converter="{StaticResource MultiBoolConverter}">
<Binding Path="ConditionOne" />
<Binding Path="ConditionTwo" Converter="{StaticResource NotConverter}"/>
</MultiBinding>
</TextBox.IsEnabled>
</TextBox>
</StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Globalization;
namespace TestMultiBinding
{
/// <summary>
/// Interaction logic for …Run Code Online (Sandbox Code Playgroud) 我正在将 a 转换WPF为UWP,它使用了许多IMultiValueConverters. 我找不到IMultiValueConverter.\xc2\xa0 的任何参考。它可以在 中使用吗UWP?如果没有,是否有替代方案?
我有四个int属性ProOne,ProTwo,ProThree和ProFour
我必须((ProOne == ProTwo) || (ProThree == ProFour))在多值转换器中实现布尔逻辑VisibilityCheckConverter.基于逻辑,多值转换器VisibilityCheckConverter返回True或False.
现在我需要将四个属性传递给Converter over DataTrigger,基于Value,我必须将Buttons Visibility更改为Visible
请帮助我如何使用具有多个参数的多值转换器编写DataTrigger
XAML代码示例:
<ControlTemplate.Triggers>
<DataTrigger Property="{Binding , Converter={StaticResource VisibilityCheckConverter,ConverterParameter=ProOne ProTwo ProThree ProFour}}" Value="true">
<Setter TargetName="Button" Property="Visibility" Value="Visible" />
</DataTrigger>
</ControlTemplate.Triggers>
Run Code Online (Sandbox Code Playgroud) 我正在使用MultiBinding转换器将(x,y)坐标传递给方法。
我不能让它在反向工作:
public class MyConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
var x = (int)values[0];
var y = (int)values[1];
return Model.Get(x, y);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
Model.Set(x, y, value); // how to get x, y here?
return new object[] { Binding.DoNothing, Binding.DoNothing };
}
}
Run Code Online (Sandbox Code Playgroud)
数据将以表格的形式可视化。这是单元格模板:
<TextBox>
<TextBox.Text>
<MultiBinding Converter="{StaticResource converter}" Mode="TwoWay">
<Binding Path="X" Mode="OneWay" />
<Binding Path="Y" …Run Code Online (Sandbox Code Playgroud) 使用转换器(IValueConverter)和传入其他值作为参数(ConverterParameter)与使用MultiConverter(IMultiValueConverter)并传递多个转换器值之间有什么区别?
我有下拉和网格.在网格列中有超链接.如果Dropdown集合包含1个项目,则下拉列表应该是不可见的.我需要一个逻辑来将Visibility绑定到项目集合.
这是GRid中一个超链接的XAML.
<!--Associate-->
<TextBlock Margin="10, 0, 0, 0">
<TextBlock.Visibility>
<MultiBinding Converter="{StaticResource courseListVisibilityConverter}"
ConverterParameter="Associate">
<Binding Path="IsCourseAssocited"
RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type DPA2:TakenCoursesNotApplied}}" />
<Binding Path="DataContext"
RelativeSource="{RelativeSource Self}" />
</MultiBinding>
</TextBlock.Visibility>
<Hyperlink DataContext="{Binding}"
Name="Associate"
IsEnabled="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TextBlock}}, Path=IsVisible}"
Click="Associate_Click">
<TextBlock TextWrapping="Wrap"
Text="Associate" />
</Hyperlink>
</TextBlock>
public class CourseListVisibilityConverter : IMultiValueConverter
{
public object Convert(object[] value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null || value[0] == null || value[1] == null) return Visibility.Collapsed;
bool IsEditMode = value[0] == DependencyProperty.UnsetValue ? …Run Code Online (Sandbox Code Playgroud) 我有一个选项卡控件,其中有许多选项卡项。我正在尝试将多值转换器应用于 tabitem 的可见性属性。
<TabControl>
<TabItem
DataContext="{Binding TabModel[3]}"
x:Name="Tab3"
Header="Test">
<TabItem.Visibility>
<MultiBinding Converter="{StaticResource settingsvisibility}">
<Binding Path="UserRole"/>
<Binding Path="UserName"/>
</MultiBinding>
</TabItem.Visibility>
<tabView:view />
</TabItem></tabControl>
Run Code Online (Sandbox Code Playgroud)
我的转换器代码如下
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
Visibility visiblity = Visibility.Collapsed;
int id = System.Convert.ToInt32(values[0]);
string tabName = values[1].ToString();
...
....
...
}
Run Code Online (Sandbox Code Playgroud)
但是这些值没有正确传递。我收到以下异常
无法将“MS.Internal.NamedObject”类型的对象转换为“System.IConvertible”类型。谁能帮我摆脱这个问题?
wpf ×13
c# ×4
.net ×3
multibinding ×2
mvvm ×2
xaml ×2
binding ×1
converter ×1
data-binding ×1
datagrid ×1
datatrigger ×1
grid ×1
relaycommand ×1
tabcontrol ×1
uwp ×1