2013-02-21 2 views
0

У меня есть простой XAML, который выглядит, как показано ниже:стиль Модифицирование и MultiBinding условно

<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 являются как обязательные поля теперь, и что кнопка не позволяет, если обе коробки не имеют текста.

Я хочу сделать следующее: Когда в выпадающем списке выбрано четное число, я хочу сделать запись в текстовом поле2 необязательной. Это означает, что я удаляю его из многосвязного (из IsEnabled кнопки), а также удаляет стиль. Однако, когда выбрано нечетное число, я хочу их вернуть.

Может кто-нибудь помочь?

ответ

0

Я смог сделать это, условно проверив файл xaml.cs в событии selectionchanged со списком.

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()); 
     } 
    } 
+1

Хотя это работает, насколько сложнее вы сделали это для создания автоматических модульных тестов. Кроме того, это бизнес-логика (необязательные данные в определенных ситуациях), которые вы встроили в свой интерфейс. Возможно, это небольшое приложение и не требует сложности MVVM, но я хочу, чтобы другие могли найти это решение, чтобы рассмотреть недостатки этого решения. –

+0

Согласен. Вы предлагаете лучшее решение, не преобразовывая его в MVVM? – naspras

0

Я думаю, что изменение MultiBinding на основе дополнительных записей будет проблематичным. Мое предложение - использовать ViewModel и создать Свойство зависимостей для IsButtonEnabled и поместить логику для дополнительных записей и проверки в ViewModel. Затем вы можете просто привязать к IsButtonEnabled DP.

+0

Спасибо. Но я намереваюсь сделать это так или иначе, не создавая ViewModel. Не могли бы вы помочь? – naspras

 Смежные вопросы

  • Нет связанных вопросов^_^