我有一个ListBox,我将ItemsSource设置为从WCF服务填充的CollectionViewSource.我在ListBox.ItemTemplate\DataTemplate中使用值转换器来转换ItemsSource中对象的属性.
这一切都按预期工作,但现在我需要更新转换过程,以便转换后的值仍然基于单个对象属性值,除非另一个属性等于特定值.并且该值在xaml后面的代码中设置,这是在页面构造函数中设置的字段级变量.
为此,我想将字段级变量作为ValueConverter的ConverterParameter传递.我已经尝试了几种方法,主要使用这个问题的想法,除了我总是得到一个错误解析xaml(并且应用程序无法加载).
一个修复可能是添加属性到ItemsSource中的对象,但我真的不想这样做.部分是因为该对象在几个项目中使用,所以我不想改变我......因为我想看看其他方法是否可行.另外我相信wpf有一个MultiValue转换器(也许是SL 4.0),但我在SL 3.0上.
我的猜测是到目前为止我遇到的问题是因为加载,绑定和解析xaml的时间.
所以有几个问题:
我正在创建一个简单的输入表单来创建一个帐户.在表单上有一个公司成立年份的输入字段,这是一个简单的文本框,用户将输入年份,即2005年.
但是,在尝试将此插入到数据库字段(即datetime)时,尽管将文本框条目转换为datetime,但仍会引发错误...
myCompanyAccount.Founded = Convert.ToDateTime(this.TxtCompanyFounded.Text);
Run Code Online (Sandbox Code Playgroud)
有没有办法可以将一年的输入(即2005年)转换为日期时间,以便将其插入数据库......?提前致谢!
我有代码读取一个数字(但作为一个字符串),我试图将其转换为一个字节.
通常值在0和1之间(如.25),我的代码工作正常,但我现在遇到一个负值,特别是"-1",并试图弄清楚为什么这个代码正在爆炸:
public static byte GetByteVal(DataRow dataRow, string caption)
{
var val = dataRow.GetValue(caption).ToString().Trim();
if (!String.IsNullOrEmpty(val))
{
decimal convertedVal = Decimal.Parse(val, NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint) * 100;
if (convertedVal >= 0)
{
return (byte)(convertedVal);
}
else
{
return (byte)0;
}
}
return (byte)0;
}
Run Code Online (Sandbox Code Playgroud)
当"val"变量以"-1"形式出现时,我在这一行得到一个例外:
decimal convertedVal = Decimal.Parse(val, NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint) * 100;
Run Code Online (Sandbox Code Playgroud)
说的是:
Run Code Online (Sandbox Code Playgroud)Input string was not in a correct format.
在StackOverflow问题上如何在MVVM模式中使用WPF转换器?我已经知道值转换器不应该在MVVM模式中使用,因为值转换器的功能应该由ViewModel本身处理.
这是有道理的.
但我记得读过你不应该将XAML元素暴露给View,而是只暴露View然后使用DataTemplates绑定和显示的数据集合.
但是,转换器似乎非常强大(例如,它们在MVVM模板演示中使用,在解压缩后看到"Messenger示例"),因为它们可以将对象转换为对象,例如将Message对象转换为FlowDocument对象,或将Customer对象转换为Visibility对象或自定义状态对象到图像等
因此,如果ViewModel将采用Value Converter的功能,它将不得不公开XAML元素和属性,如StackPanel,Visibility,Color,FlowDocument等,对吧?
有谁看到任何理由为什么ViewModel不应该像值转换器那样公开这些丰富的XAML对象?
我不确定提出这个问题的最佳方式(对于含糊不清的问题标题感到抱歉),但实际上我想使用从数据上下文传递属性的值转换器在TextBox上设置MaxLength属性,和传入属性的属性作为转换器参数.我希望以一种风格来做所有这些,而不是逐个控制.以下是以非样式方式执行此操作的示例:
<TextBox Text="{Binding MyPropertyName.TheirPropertyName}" MaxLength="{Binding MyPropertyName, Converter={StatocRespirceMyCoolConverter}, ConverterParameter=TheirPropertyName}" />
Run Code Online (Sandbox Code Playgroud)
(如果您想知道,ItsPropertyName表示MyPropertyName类型的属性,它具有[StringMaxLength(15)]等属性,我可以在值转换器中找到并返回.)此外,是否有传递MyPropertyName类型而不是实例的任何方式?我只需要类型来执行StringMaxLength属性查找.
无论如何,我怎么能在风格上做这样的事情呢?我已经达到了:
<Setter Property="MaxLength">
<Setter.Value>
<Binding Converter="{StaticResource textFieldMaxLengthConverter}" />
</Setter.Value>
</Setter>
Run Code Online (Sandbox Code Playgroud)
但是这会将整个datacontext传递给值转换器,而不是MyPropertyName对象,我真的不知道如果我可以解析MyPropertyName.TheirPropertyName部分绑定以在绑定的ConverterParameter属性上传递ItsPropertyName .
任何指导都会非常感激!
我在python中有一个程序,我希望在其中接收带有一些值的框架.该值由xbee发送.
Xbee发送一个由union结构分成4个字节的浮点数,如下所示:
typedef union _data{
float f;
char s[4];
} myFloat;
Run Code Online (Sandbox Code Playgroud)
所以例如,17.23给了我10,-41,-119,65.所以,我必须在python中恢复所有这些值,在我得到4之后,将它们转换成浮点数.自从我读取每个(serial.read())以获得浮点结果后,我该怎么办?
这些值将由python脚本接收,我想再次将它们加入浮点数.我在python中读到了关于struct的内容但是我不是很好的python技巧,我不明白它是如何工作的.
我使用serial.read逐个读取字节.
任何的想法?
我创建了一个多绑定转换器(ListItemDescriptionConverter),它将多个值组合到一个字符串中,作为ListBox项目的输出。但是我不知道如何获取资源字典以指向单独的.cs文件中的转换器类。当我使用以下标记时找不到它:
<TextBlock Style="{StaticResource BasicTextStyle}">
<TextBlock.Text>
<MultiBinding Converter="StaticResource {ListItemDescriptionConverter}">
<Binding Path="Genres"></Binding>
<Binding Path="Year"></Binding>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
我必须在资源字典中做其他事情来访问转换器类吗?我无法在其中添加引用,Window.Resources
因为它需要在资源字典中,因此我可以在整个应用程序中重用该样式。
如果使用MVVM设计模式实现WPF应用程序,是否存在使用值转换器的任何情况?在我看来,值转换器与视图模型完全相同,即为视图准备数据.
那么,价值转换器有一些很好的用途吗?
最
诚挚的问候Oliver Hanappi
我有一个TextBlock
文本绑定生活自动收报机(通过System.Date.Now
),该绑定包含一个ValueConverter
应该将字符串转换为大写的.但是,字符串不会产生大写字母(结果就好像转换器不在那里).如何将绑定结果设为大写?
<TextBlock
Text="{Binding Now,
Source={StaticResource ticker},
StringFormat={}{0:dddd\, MMMM d},
Converter={StaticResource CaseConverter}}" />
Run Code Online (Sandbox Code Playgroud) 我有一个textBox,我使用值转换器来设置text属性,因为这个值取决于datagrid的selección.所以我使用这段代码:
<TextBox Height="23" HorizontalAlignment="Stretch" Margin="5,26,0,0" Name="myTxt" VerticalAlignment="Top"
Text="{Binding ElementName=Principal, Path=DataContext.OneProperty, Converter={StaticResource myConverter}}">
Run Code Online (Sandbox Code Playgroud)
Normallt我用这种方式:
Text="{Binding myProperty}"
Run Code Online (Sandbox Code Playgroud)
但在这种情况下我需要一个转换器,但我想更新dataContext中的属性.
这是可能的,或者如果我使用转换器,我无法更新dataContext中的属性?
谢谢.
编辑:
我试着变得有点清醒.
我有一个有TextBox的视图.我想根据转换器设置此textBox.此转换器在视图模型中使用名为myDataGridSelectedItems的属性.但是我在视图模型中有一个名为myTextBox的其他属性,当textBox使用从converver接收的值更新其值时,我想要更新它.
所以我想将视图的Text属性绑定到视图模型中的两个属性.
valueconverter ×10
wpf ×6
data-binding ×3
mvvm ×3
c# ×2
silverlight ×2
xaml ×2
.net ×1
asp.net ×1
byte ×1
c#-4.0 ×1
datetime ×1
decimal ×1
python ×1
styles ×1