WPF |多绑定不起作用

时间:2015-08-08 06:43:50

标签: c# .net wpf

我尝试使用多重绑定,因为我有两个文本框来验证Text.Length

这是我的代码。

<StackPanel HorizontalAlignment="Left" Height="28" Margin="107,238,0,0" VerticalAlignment="Top" Width="104" Orientation="Horizontal" Grid.Column="1">
    <Button x:Name="btnAddBenefeciary" Content="Add Beneficiary" HorizontalAlignment="Left" VerticalAlignment="Top" Width="99" RenderTransformOrigin="0.587,0.65" Height="28" Click="btnAddBenefeciary_Click">
        <Button.IsEnabled>
            <MultiBinding Converter="{StaticResource IsEnabledConverter}">
                <Binding ElementName="tbFatherName" Path="Text.Length"/>
                <Binding ElementName="tbFatherName" Path="Text.Length" />
            </MultiBinding>
        </Button.IsEnabled>
    </Button>
</StackPanel>

在同一档案中,我在<Window.Resources>

下添加了这一行
<local:IsEnabledConverter x:Key="IsEnabledConverter" />

但我不知道在哪里放这段代码所以我确实放入了自己的xaml.cs文件,这个窗口属于该文件。

public class IsEnabledConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        foreach (var isValid in values)
            if (isValid as bool? == false)
                return false;
        return true;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

我是否需要创建另一个文件,或者在同一个文件中使用这段代码是没关系的,因为在创建新文件的描述中没有人说过任何内容。

我试着遵循这些指南。

https://social.msdn.microsoft.com/Forums/vstudio/en-US/5b9cd042-cacb-4aaa-9e17-2d615c44ee22/can-i-bind-a-controls-isenabled-to-the-selectedindex-of-one-or-more-comboboxes?forum=wpf

http://developingfor.net/2009/01/21/multibinding-in-wpf/

Making a Button IsEnabled state depend on two textboxes

因此,如果我必须创建新文件,我将如何将其引用到新文件中...很抱歉,因为我是WPF和.NET的新手。

= - = - = - = - = - = - = - = - =

按照回答中的说明进行了更改,但收到了新的错误..

enter image description here

= - = - = - = - = - = - = -

更新2:

试过这样......

enter image description here

2 个答案:

答案 0 :(得分:0)

转换器类可以位于您想要的任何文件夹/文件中,转换器的命名空间很重要。 但是将转换器(以及任何类别的转换器)放在单独的文件中与其包含的类相同,这是一个好习惯。并将转换器类放在一个单独的转换器&#34;夹。 至于如何引用它,您需要在xaml文件中声明转换器的命名空间:

<Window 
....
             xmlns:converters="clr-namespace:YourProject.ConvertersNamespace"
....
>

然后您可以在资源中引用转换器类:

<converters:IsEnabledConverter x:Key="IsEnabledConverter" />

然后如您所述,在多重绑定中使用转换器。你有多个绑定两个相同的绑定到tbFatherName元素名称,但我想这只是一个错字。

答案 1 :(得分:0)

Content =“Confirm”Grid.Column =“1”Horizo​​ntalAlignment =“Left”Margin =“10,160,0,0”

Grid.Row =“1”VerticalAlignment =“Top”Height =“27”Width =“80”&gt;

        <Button.CommandParameter>

            <MultiBinding Converter="{StaticResource CustomMultiValueConverterKey}">

                <Binding ElementName="cboCountry" Path="SelectedValue"/>
                    <Binding ElementName="cboShopKeeperID" Path="SelectedValue"/>

            </MultiBinding>

        </Button.CommandParameter>

    </Button>

后面必须写

CommonControlHandlers.populateControls(“CALL GetCountryList()”,cboCountry);

     CommonControlHandlers.populateControls<ComboBox>("CALL GetShopKeeperList()", cboShopKeeperID);