0

以下のような単純な XAML があります。

<Window.Resources>
    <Converters:ButtonVisibilityConverter x:Key="m_ButtonConverter"/>
</Window.Resources>

<Grid>
    <ComboBox Height="23" HorizontalAlignment="Left" Margin="71,18,0,0" Name="comboBox1" VerticalAlignment="Top" Width="229" SelectionChanged="comboBox1_SelectionChanged">              
    </ComboBox>
    <TextBox Height="23" HorizontalAlignment="Left" Margin="71,76,0,0" Name="textBox1" VerticalAlignment="Top" Width="229" Style="{StaticResource requiredFieldValidationStyle}"/>
    <TextBox Height="23" HorizontalAlignment="Left" Margin="71,125,0,0" Name="textBox2" VerticalAlignment="Top" Width="229" Style="{StaticResource requiredFieldValidationStyle}"/>        
    <Button Content="Submit" Height="23" HorizontalAlignment="Left" Margin="225,175,0,0" Name="button1" VerticalAlignment="Top" Width="75">
        <Button.IsEnabled>
            <MultiBinding Converter="{StaticResource m_ButtonConverter}">
                <Binding ElementName="textBox1" Path="Text" />
                <Binding ElementName="textBox2" Path="Text" />
                <Binding ElementName="comboBox1" Path="Text" />
            </MultiBinding>
        </Button.IsEnabled>
    </Button>
    <Label Content="Box 1" Height="28" HorizontalAlignment="Left" Margin="12,74,0,0" Name="label1" VerticalAlignment="Top" />
    <Label Content="Box 2" Height="28" HorizontalAlignment="Left" Margin="12,123,0,0" Name="label2" VerticalAlignment="Top" />
</Grid>

現在、textbox1 と textbox2 は両方とも必須フィールドであり、両方のボックスにテキストがない限り、ボタンは有効になりません。

私は次のことをしたい: コンボボックスで偶数が選択されている場合、textbox2 のエントリをオプションにしたい。つまり、(ボタンの IsEnabled の) マルチバインディングから削除し、スタイルも削除します。ただし、奇数を選んだ場合は、返してもらいたいです。

誰か助けてくれませんか?

4

2 に答える 2

0

MultiBindingオプションのエントリに基づいて変更するのは問題があると思います。私の提案は、ViewModelを使用して、IsButtonEnabledのDependencyプロパティを作成し、オプションのエントリと検証のロジックをViewModelに配置することです。IsButtonEnabled次に、 DPにバインドするだけです。

于 2013-02-21T17:29:22.927 に答える
0

コンボボックスの selectionchanged イベントで xaml.cs ファイルを条件付きでチェックインすることで、これを行うことができました。

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var selVal = (int)comboBox1.SelectedValue;

        if ((selVal % 2) == 0)
        {
            // remove the style
            textBox2.Style = null;

            // remove from the button's IsEnabled multibinding                 
            _vfs.NumberValidationFlag = false;
            BindingOperations.ClearBinding(button1, Button.IsEnabledProperty);
            BindingOperations.SetBinding(button1, Button.IsEnabledProperty, GetBindingForButton());                
        }
        else
        {
            // add back the style
            Style myStyle = (Style)Application.Current.Resources["requiredFieldValidationStyle"];
            textBox2.Style = myStyle;

            // add back to the button's IsEnabled multibinding                
            _vfs.NumberValidationFlag = true;
            BindingOperations.ClearBinding(button1, Button.IsEnabledProperty);
            BindingOperations.SetBinding(button1, Button.IsEnabledProperty, GetBindingForButton());
        }
    }
于 2013-02-26T22:04:11.353 に答える