0

複数のフィールドを持つフォームがあります。DB入力を実行する「検証」ボタンもあります。最小限のフィールドがユーザーによって定義されている場合にのみ、そのボタンをアクティブにしたいと思います。

これまでのところ、すべてのフィールドがテキストだったので非常に単純でした:

<Button x:Name="Manage" Content="Manage">
    <Button.IsEnabled>
        <MultiBinding Mode="OneWay" Converter="{StaticResource FieldsFilledinToVisible}">
            <Binding ElementName="name1" Path="Text"/>
            <Binding ElementName="name2" Path="Text"/>
        </MultiBinding>
    </Button.IsEnabled>
</Button>

コンバーターは次のとおりです。

public class AllValuesDefinedConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        bool isEnabled = false;
        for (int i = 0; i < values.Length; i++)
        {
            isEnabled = isEnabled || string.IsNullOrEmpty(values[i].ToString());
        }
        return !isEnabled;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        return null;
    }
}

ただし、追加のチェック ボックスを検討する必要があります。ここで、条件は[これらのチェックボックスのいずれかがチェックされている + 以前のテキスト フィールドが定義されています --> 検証ボタンを有効にする] である必要があります。

<WrapPanel Style="{StaticResource WrapStyle_Inputs}">
    <CheckBox Content="Check1" IsChecked="{Binding Checked1, Mode=TwoWay}"/>
    <CheckBox Content="Check2" IsChecked="{Binding Checked2, Mode=TwoWay}"/>
    <CheckBox Content="Check3" IsChecked="{Binding Checked3, Mode=TwoWay}"/>
</WrapPanel>

どうすればそうできるか知っていますか?

ありがとう!

4

1 に答える 1

2

コンバーターは、この仕事には不適切なツールです。代わりに、検証、コマンド、およびビュー モデルを確認する必要があります。ビュー モデルは検証ロジックを実装し、ボタンがバインドされているコマンドを公開します。このコマンドは、検証ロジックがパスした場合にのみ実行可能になります。

于 2013-04-01T09:04:21.527 に答える