2014-11-04 4 views
1

При первой загрузке окна я хочу, чтобы текстовое поле было свернуто, сохраняя привязку к свойству (SomeProp) в моей модели Viewmodel.Привязка значения по умолчанию к видимости, если значение по умолчанию равно null в ViewModel

К сожалению, я не могу этого сделать.

что я пробовал:

Попытка 1: Я попытался установить в явной форме значение NULL в конструкторе ViewModel, а также явно вызвать OnPropertyChanged. Конвертер не запускается.

Попытка 2: В коде позади я установил видимость по умолчанию для видимости. Завершена. это похоже на побочный эффект, что видимость больше не связана с свойством SomeProp.

Покушение 3: После прибегая к помощи я нашел кое-что о PriorityBinding, но это, кажется, работает только на TEXT свойство текстового поля Use a default value when binding cannot be evaluated because of a null value

Спасибо заранее,

Дополнительная информация:

У меня есть текстовое поле, и оно должно быть видимым только в том случае, если свойство (SomeProp) в моей ViewModel имеет значение «Другое». Я успешно использую Convertor для этого. Это означает, что всякий раз, когда я изменяю значение SomeProp, текстовое поле становится видимым/невидимым в зависимости от значения SomeProp. Я использовал следующий код: WPF: Binding Visibility by string contents

Кто-нибудь знает, как я могу установить тэ текстового поле видимость для Свернутых при сохранении привязки к собственности SomeProp.

XAML

 <TextBox Name="txtbox" Visibility="{Binding SomeProp.Description, Converter={StaticResource StringOtherToVisibilityConverter}}" TextWrapping="Wrap" Height="150" MaxLength="2000" 
       Text="{Binding SomeProp2.Text, Mode=TwoWay}" 
      ScrollViewer.VerticalScrollBarVisibility="Auto" AcceptsReturn="True"> 
     </TextBox> 

Convertor

class StringOtherToVisibilityConverter : System.Windows.Markup.MarkupExtension, IValueConverter 
{ 
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 

    if (value != null) 
    { 
     if (value.ToString() == "Other") 
     { 
      return Visibility.Visible; 
     } 
     else 
     { 
      return Visibility.Collapsed; 
     } 


    } 
    else 
    { 
     return Visibility.Collapsed; 
    } 

} 
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    return null; //DependencyProperty.UnsetValue; 
} 

public override object ProvideValue(IServiceProvider serviceProvider) 
{ 
    return this; 
} 


} 
+2

Установка 'TargetNullValue = {x: Static Visibility.Collapsed}' должна свернуть цель привязки, когда исходное значение равно null. Вы также можете установить 'FallbackValue', который применяется, когда сбой привязки или преобразования завершается с ошибкой. –

+0

TargetNullValue не работает. Может быть, потому, что я использую SomeProp.Description, а SomeProp - null? FallBackValue с другой стороны делает работа. Благодарю. Если вы ответите, я соглашусь. – user1841243

ответ

3

Установка TargetNullValue={x:Static Visibility.Collapsed} должен свернуть обязательную цель, когда значение источника null.

Вы также можете установить FallbackValue, который применяется при сбое привязки или преобразовании. Такие сбои могут включать в себя NullReferenceException, которые произойдут при связывании с X.Y, если X - null.