- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下代码用于绑定(bind) ListView,但对 ListView 的任何更改都不会返回到内存中的数据结构。当我有标准绑定(bind)时,它可以双向工作,但不能使用多重绑定(bind)。我需要使用多重绑定(bind)来获取转换器中使用的 StringFormat 属性。
您能否让我知道一种方法来调用转换器的“ConvertBack”方法?
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:DataFlowControls">
<local:ValueToFormatedValueConverter x:Key="valueToFormatedValueConverter" />
<Style TargetType="{x:Type local:DfcEditTextBox}">
<Setter Property="Margin" Value="-6, 0, -6, 0" />
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:DfcEditTextBox}">
<TextBlock x:Name="PART_TextBlock" Padding="2, 0, 0, 0">
<TextBlock.Text>
<MultiBinding Converter="{StaticResource valueToFormatedValueConverter}">
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Value" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"/>
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="StringFormat" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
<!--Text="{Binding Path=Value, Mode=TwoWay, Converter={StaticResource valueToFormatedValueConverter}, RelativeSource={RelativeSource TemplatedParent}}" />-->
<Window x:Class="DataFlowControls.Show.DfcListView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dfc="clr-namespace:DataFlowControls;assembly=DataFlowControls"
xmlns:local="clr-namespace:DataFlowControls.Show"
Title="DfcListView" Height="400" Width="500">
<Grid>
<StackPanel>
<dfc:DfcListView Name="lvTradesCollection" ItemsSource="{Binding Path=TradesCollection}" KeyboardNavigation.DirectionalNavigation="Continue" >
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListView.ItemContainerStyle>
<ListView.Resources>
<DataTemplate x:Key="Date_DataTemplate">
<dfc:DfcEditTextBox Value="{Binding Path=Date, Mode=Twoway, UpdateSourceTrigger=PropertyChanged}" StringFormat='{}{0:dd/MM/yyyy}' HorizontalContentAlignment="Left" IsEditable="true" />
</DataTemplate>
<DataTemplate x:Key="Asset_DataTemplate">
<dfc:DfcEditTextBox Value="{Binding Path=Asset, Mode=Twoway, UpdateSourceTrigger=PropertyChanged}" HorizontalContentAlignment="Left" IsEditable="true" />
</DataTemplate>
<DataTemplate x:Key="Lots_DataTemplate">
<dfc:DfcEditTextBox Value="{Binding Path=Lots, Mode=Twoway, UpdateSourceTrigger=PropertyChanged}" StringFormat='N0' HorizontalContentAlignment="Center" IsEditable="true" />
</DataTemplate>
<DataTemplate x:Key="Price_DataTemplate">
<dfc:DfcEditTextBox Value="{Binding Path=Price, Mode=Twoway, UpdateSourceTrigger=PropertyChanged}" StringFormat='N2' HorizontalContentAlignment="Center" IsEditable="true" />
</DataTemplate>
<DataTemplate x:Key="IsCheap_DataTemplate">
<dfc:DfcEditCheckBox Value="{Binding Path=IsCheap, Mode=Twoway, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center" IsEditable="true" />
</DataTemplate>
<DataTemplate x:Key="NextTrade_DataTemplate">
<dfc:DfcEditComboBox Value="{Binding Path=NextTrade, Mode=Twoway, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{x:Static local:DfcListView.NextTradeTypes}" IsEditable="true" />
</DataTemplate>
</ListView.Resources>
<ListView.View>
<dfc:DfcGridView>
<dfc:DfcGridViewColumn Header="Date" Width="140" CellTemplate="{StaticResource Date_DataTemplate}" />
<dfc:DfcGridViewColumn Header="Asset" Width="40" CellTemplate="{StaticResource Asset_DataTemplate}" />
<dfc:DfcGridViewColumn Header="Lots" Width="40" CellTemplate="{StaticResource Lots_DataTemplate}" />
<dfc:DfcGridViewColumn Header="Price" Width="50" CellTemplate="{StaticResource Price_DataTemplate}" />
<dfc:DfcGridViewColumn Header="IsCheap" Width="60" CellTemplate="{StaticResource IsCheap_DataTemplate}" />
<dfc:DfcGridViewColumn Header="NextTrade" Width="80" CellTemplate="{StaticResource NextTrade_DataTemplate}" />
</dfc:DfcGridView>
</ListView.View>
</dfc:DfcListView>
<Button Content="Add Row" HorizontalAlignment="Left" Margin="5,5,5,5" Click="AddRow_Click"/>
<Button Content="Update Row" HorizontalAlignment="Left" Margin="5,5,5,5" Click="UpdateRow_Click"/>
</StackPanel>
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Data;
using System.Globalization;
using System.Windows;
namespace DataFlowControls
{
public class ValueToFormatedValueConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
object valueObject = values[0];
string stringFormat = (string)values[1];
if (stringFormat == null)
{
return valueObject.ToString();
}
if (stringFormat.Substring(0, 1) == "N")
{
int intValue;
if (Int32.TryParse(valueObject.ToString(), out intValue))
{
return (intValue * 100).ToString(stringFormat);
}
double doubleValue;
if (Double.TryParse(valueObject.ToString(), out doubleValue))
{
return doubleValue.ToString(stringFormat);
}
decimal decimalValue;
if (Decimal.TryParse(valueObject.ToString(), out decimalValue))
{
return decimalValue.ToString(stringFormat);
}
}
if (stringFormat == "{0:dd/MM/yyyy}")
{
return ((DateTime)valueObject).ToShortDateString();
}
throw new NotImplementedException();
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
return Enumerable.Repeat(value, targetTypes.Length).ToArray();
}
}
}
最佳答案
您需要在 MultiBinding 上明确设置 TwoWay 模式:
<TextBlock.Text>
<MultiBinding Converter="{StaticResource valueToFormatedValueConverter}"
Mode="TwoWay">
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Value" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"/>
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="StringFormat" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"/>
</MultiBinding>
</TextBlock.Text>
关于WPF MultiBinding TextBlock.Text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10013652/
MultiBinding 到背景属性不起作用。转换后,背景只是变成系统的默认颜色,而不是我在 MultiValueConverter 中设置的颜色。其他一切都已正确设置。我的 MultiBinding
让我们考虑一种动物 Model如下: public class Animal { public string name { set; get; } public int age { s
下面的代码将列宽:Samp1.ActualWidth 和 Samp2.ActualWidth 绑定(bind)到 StatName.Width。请参阅:Bind DataGrid Column Wid
我在尝试将现有 XAML 转换为 MultiBinding 时遇到问题。 当前代码(需要替换)是 我现在拥有的:
我正在尝试转换一些单位。Convertback 函数应如何处理以下内容。获得以下 XAML。标签设置为我的 ViewModel 中的唯一对象。 这种风格...
我想做类似的事情 post但使用MultipleBindings。 所以是这样的:
以下代码用于绑定(bind) ListView,但对 ListView 的任何更改都不会返回到内存中的数据结构。当我有标准绑定(bind)时,它可以双向工作,但不能使用多重绑定(bind)。我需要使用
在 中设置样式(假设转换器返回红色)
关闭。这个问题需要debugging details .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 1年前关闭。 Improve this question
我正在尝试使用标签控件在 XAML 中显示一个字符串。以下是我的 XAML 代码:
如何跳过更新MultiBinding的一些子绑定(bind)?我已经在代码隐藏中定义了一个 MultiBinding ,它需要两次读取-仅属性和一个普通属性生成单个值。在 ConvertBack 的情
我正在 wpf TreeView 上使用上下文菜单,并且我几乎可以满足我的需求。在解释问题之前,让我先解释一下上下文菜单的 XAML 定义的作用。 对于上下文菜单中的每个菜单项,我们都有一个命令,该命
使用 com.google.inject.multibindings.Multibinder 时,我对泛型有点困惑如下: interface MessageParser { fun accept(
我知道我可以使用特定注释进行 Guice 多重绑定(bind),如下所示 Multibinder.newSetBinder(binder(), Bound.class, Annotation.clas
基本上我需要知道的是如何发送 HierarchicalDataTemplate 的来源绑定(bind)到一个绑定(bind)中,这就是我所拥有的:
我创建了一个内联 MultiBinding使用 this post作为引用。更具体地说,我正在使用 Christian Myksvoll 的答案来创建自定义绑定(bind)。我的类(class)看起来
我有一个内置动态语言切换的应用程序。根据所选的文化,整个应用程序中的字符串都会发生变化。翻译后的字符串及其原始值来自资源文件。我使用绑定(bind)将资源值附加到按钮、标签等。大部分绑定(bind)发
我想做的很简单。我有一个窗口,我希望将标题绑定(bind)到两个不同的属性。每次属性之一更改时,标题都应更新。 我首先尝试的但没有成功 错
我创建了一个自定义的 MultiValue Converter 来在 MultiBinding 到 TextBox 时执行一些逻辑;但是我不想使用 convertBack,因为绑定(bind)值没有编
我这辈子都做不到。我需要从文本 block 中的一对时间跨度对象显示 hh:mm,但它无法正常工作。这是我目前所拥有的:
我是一名优秀的程序员,十分优秀!