标签: multibinding

将MultiBinding转换器和Trigger混合在一起时发出问题

设置样式<UserControl.Resources>(假设转换器返回红色)

<Style x:Key="FieldToValidate" TargetType="{x:Type TextBox}">
    <Setter Property="Background">
        <Setter.Value>
            <MultiBinding Converter="{StaticResource VisualQueueOnErrorConverter}">
                <Binding RelativeSource="{RelativeSource self}" Path="Name" />
                <Binding RelativeSource="{RelativeSource AncestorType={x:Type DockPanel}}" Path="DataContext.ErrorFieldName" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay" />
            </MultiBinding>
        </Setter.Value>
    </Setter>

    <Style.Triggers>
        <Trigger Property="Background" Value="Red">
            <Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource self}}" />
            <Setter Property="Foreground" Value="White" />
        </Trigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

和控制:

<TextBox  Name="FirstName" Text="{Binding FirstName}" Style="{StaticResource FieldToValidate}">  
Run Code Online (Sandbox Code Playgroud)

FirstName当MultiBinding转换器将背景颜色更改为红色时,预期结果是场获得焦点并且前景色变为白色,但是当场的背景变为红色时,它不会获得焦点,也不会获得新的前景色.

几乎看起来XAML解析器在属性设置器的MultiBinding转换器之前处理Trigger .

欢迎任何和所有建议!

.net xaml triggers multibinding

12
推荐指数
1
解决办法
1万
查看次数

WPF:有没有办法在MultiValueConverter的ConvertBack方法中获取原始值?

我编写了一个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?我想要实现的是,如果取消选中复选框,则将从列表中删除该值,如果选中该值,则该值将添加到列表中.

wpf xaml multibinding imultivalueconverter

11
推荐指数
2
解决办法
4633
查看次数

转换器中的WPF MultiBinding失败==> DependencyProperty.UnsetValue

我的代码无法在启动时,因为在数值数组Converter被称为由Multibinding不是充满了适当的值,但有值 DependencyProperty.UnsetValue.

看看转换器,看看我在哪里得到错误

public class ButtonColorConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            string val1 = string.Format("  {0}  ", values[0]);
            string val2 = (string)values[1];  **//Here i am getting ==> {DependencyProperty.UnsetValue}** 
            return val1.Equals(val2)
                ? Brushes.NavajoWhite
                : Brushes.White;  
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
Run Code Online (Sandbox Code Playgroud)

您可以下载完整代码或查看我的代码段,如下所示.

MainWindow.xaml

<Window x:Class="DataPager.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        xmlns:Local="clr-namespace:DataPager.Convertor_For_BackGround">
    <Grid>
        <Grid.Resources> …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml multibinding

11
推荐指数
4
解决办法
2万
查看次数

FallbackValue如何与MultiBinding一起使用?

我问,因为它似乎不起作用.

假设我们绑定到以下对象:

public class HurrDurr
{
  public string Hurr {get{return null;}}
  public string Durr {get{return null;}}
}
Run Code Online (Sandbox Code Playgroud)

好吧,看来如果我们使用MultiBinding来反映这一点,就会显示回退值,对吗?

<TextBlock>
    <TextBlock.Text>                                
        <MultiBinding StringFormat="{}{0} to the {1}"
                        FallbackValue="Not set!  It works as expected!)">
            <Binding Path="Hurr"/>
            <Binding Path="Durr"/>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

然而,结果实际上是"对".即使强制绑定返回DependencyProperty.UnsetValue也不起作用:

<TextBlock xmnlns:base="clr-namespace:System.Windows;assembly=WindowsBase">
    <TextBlock.Text>                                
        <MultiBinding StringFormat="{}{0} to the {1}"
            FallbackValue="Not set!  It works as expected!)">
            <Binding Path="Hurr"
                FallbackValue="{x:Static base:DependencyProperty.UnsetValue}" />
            <Binding Path="Durr"
                FallbackValue="{x:Static base:DependencyProperty.UnsetValue}" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

尝试使用TargetNullValue,它也是一个半身像.

所以似乎MultiBinding永远不会使用FallbackValue.这是真的吗,还是我错过了什么? …

wpf multibinding fallbackvalue

9
推荐指数
1
解决办法
6236
查看次数

WPF MultiBinding - UnsetValue问题

我有一个TextBlock.当其文本绑定为:

<Binding Path="Applicant2.Surname"/>
Run Code Online (Sandbox Code Playgroud)

它运行正常,但是我想要包含Forenames,所以将绑定更改为:

<MultiBinding StringFormat="{}{0} {1}">
    <Binding Path="Applicant2.Forenames"/>
    <Binding Path="Applicant2.Surname"/>
</MultiBinding>
Run Code Online (Sandbox Code Playgroud)

这将显示{DependencyProperty.UnsetValue} {DependencyProperty.UnsetValue},直到第一次设置该值.

我怎么能阻止这个?为什么我没有遇到第一个简单绑定的问题?

wpf binding multibinding

9
推荐指数
1
解决办法
3903
查看次数

ConverterParameter与Multibinding上的绑定

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

    <HierarchicalDataTemplate DataType="{x:Type Elements:RootElement}">
        <HierarchicalDataTemplate.ItemsSource>
            <MultiBinding Converter="{StaticResource filterConverter}" ConverterParameter="{Binding IsFilterd}">
                <Binding Path="Children"/>
                <Binding Path="FilterChildren"/>
            </MultiBinding>
        </HierarchicalDataTemplate.ItemsSource>
        <TextBlock Text="{Binding Name}" FontWeight="Normal"/>
    </HierarchicalDataTemplate>
Run Code Online (Sandbox Code Playgroud)

IsFiltered是应用模板的对象上的属性.我总是得到一个XAML解析器错误,在ConverterParameter中Binding不正确/允许...或者还有其他方法可以做到这一点?

映入眼帘,

于尔根

data-binding wpf hierarchicaldatatemplate multibinding

9
推荐指数
1
解决办法
2万
查看次数

WPF MultiBinding

我有两个文本框,一个用于帐单地址字段,另一个用于送货地址字段.当用户在"帐单邮寄地址"文本框中键入内容时,由于以下绑定方案,送货地址文本框会获得相同的值:

<TextBox Name="txtBillingAddress" Text="{Binding BillingAddress, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />

<TextBox Name="txtShippingAddress">
   <TextBox.Text>
      <MultiBinding Converter="{StaticResource AddressConverter}">
         <Binding ElementName="txtBillingAddress" Path="Text" Mode="OneWay" />
         <Binding Path="ShippingAddress" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay" />
      </MultiBinding>
   </TextBox.Text>
</TextBox>
Run Code Online (Sandbox Code Playgroud)

这在一定程度上可行.我还希望将送货地址绑定到我的数据库实体,因为帐单地址是.我的问题是,虽然发货地址文本框中填充了帐单地址中输入的内容,但在发生这种情况时不会触发ConvertBack方法.只有在货物地址文本框中直接输入内容时才会触发.

我错过了什么?

c# data-binding wpf multibinding

8
推荐指数
1
解决办法
2万
查看次数

使用具有多个绑定的StringFormat进行Multibinding的较短xaml语法是什么?

对于单个绑定,我们使用:

<TextBlock>
  <TextBlock.Text>
    <MultiBinding StringFormat="{}{0}">
      <Binding Path=EmployeeName/>
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

或更短的语法:

<TextBlock 
 Text="{MultiBinding StringFormat=\{0\}, Bindings={Binding Path=EmployeeName}}"/>
Run Code Online (Sandbox Code Playgroud)

现在,如果你有多重绑定:

<TextBlock>
  <TextBlock.Text>
    <MultiBinding StringFormat="{}{0}, {2}">
      <Binding Path="EmployeeName"/>
      <Binding Path="Age"/>
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

我想知道,它的短语法是什么?

<TextBlock 
 Text="{MultiBinding StringFormat=\{0\}, Bindings={Binding ??????}"/>
Run Code Online (Sandbox Code Playgroud)

wpf xaml binding string-formatting multibinding

8
推荐指数
1
解决办法
7379
查看次数

使用WPF样式来简化重复的MultiBindings

我正在显示几个测试的结果.每个测试有2个变量,显示结果的文本和颜色随两者而变化.我有这个工作,但有很多重复的MultiBinding正在进行,我想看看有没有办法使用Style来简化XAML.

这是我的代码的简化外观:

//TestResults.cs excerpt
public class TestResults
{
    private Test1Result test1 = new Test1Result();
    public Test1Result Test1 { get { return test1; } }

    private Test2Result test2 = new Test2Result();
    public Test2Result Test2 { get { return test2; } }
}

//TestCtrl.xaml.cs excerpt
public class TestCtrl : UserControl
{
    private TestResults results = new TestResults();
    public TestResults Results { get { return results; } }
}
Run Code Online (Sandbox Code Playgroud)
<!-- TestCtrl.xaml excerpt -->
<UserControl x:Class="Tester.TestCtrl" x:Name="TestResultsCtrl" ...>

<!-- lots of stuff -->

<TextBlock …
Run Code Online (Sandbox Code Playgroud)

wpf xaml multibinding

8
推荐指数
1
解决办法
6695
查看次数

Multiline StringFormat中的换行符或回车符

所以我有以下几点:

<TextBlock.Text>
  <MultiBinding StringFormat="So and so will donate {0:C0}&#x0d;&#x0a;to {1}, bringing the&#x0d;&#x0a;total amount to {2:C0}.">
    <Binding Path="VisitorTotal" />
    <Binding Path="EventName" />
    <Binding Path="EventTotal" />
  </MultiBinding>
</TextBlock.Text>
Run Code Online (Sandbox Code Playgroud)

我试过&#x0d;&#x0a;,&#10;,\n,\\n,及其各种组合.什么都不会给我换行.这是怎么回事?

wpf xaml textblock multibinding

8
推荐指数
1
解决办法
3388
查看次数