2013-02-12 2 views
0

I вида модели, у меня есть:Binding BooleanToVisibilityConverter для перечисления в View Model

public enum EventViewMode 
    { 
     View, 
     Update, 
     Insert 
    } 

Тогда, по мнению некоторых элементов управления должны быть видны или не accordiong значение EventViewMode.

Для булевых значений используется преобразователь BooleanToVisibilityConverter.

Есть ли способ использовать выражение в системе привязки для преобразования значения перечисления в булево выражение.

Я имею в виду, что-то вроде:

<Button x:Name="btnSave" 
    Visibility="{Binding MyVariable == EventViewMode.View , Converter={StaticResource booleanToVisibilityConverter}}" /> 

Обратите внимание, что MyVariable == EventViewMode.View не работает, то для демонстрации того, что я хочу достичь.

ответ

0

Нет, я не боюсь. Ваши варианты

  • Используйте value converter
  • Expose свойство как visbility вместо того, EventViewMode
  • Использование данных триггеров для установки требуемого свойства (в данном случае видимости) на основе значений Enum, например,

    <Button x:Name="btnSave" Visibility="{Binding MyVariable == EventViewMode.View , Converter={StaticResource booleanToVisibilityConverter}}"> 
        <Button.Style> 
         <Style TargetType={x:Type Button}> 
          <Setter Property="Visibility" Value="Collapsed" /> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding MyVariable}" Value="View"> 
            <Setter Property="Visibility" Value="Visible" /> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </Button.Style> 
    </Button> 
    
+0

DataTrigger - это то, что я искал. Спасибо. –

0

Вы можете просто выставить свойство в модели вида:

public bool IsVisible { get { return MyVariable == EventViewMode.View; } } 

Не забывайте поднимать измененные с измененными уведомлениями об изменении IsVisible при изменении MyVariable.

Если вы не хотите загрязнять свою модель обзора, следующим простейшим вариантом является реализация другого преобразователя значений.

+0

Вот как я решил это до сих пор. Проблема в том, что перечисление имеет много значений, мне нужно добавить много логических свойств в Model View, а также соответствующие уведомления chanhged. Я хотел бы получить более «чистое» решение. Благодарю. –