Можно ли добавить правило привязки к элементу Silverlight?

Надеюсь, я правильно сформулировал вопрос. Если нет, позвольте мне объяснить. Я хочу привязать свойство Source элемента Image к свойству ImageUrl моего объекта DataContext. Вот XAML:

<Image
    x:Name="EmployeeImage"
    Grid.Column="0"
    Grid.Row="0"
    Grid.RowSpan="2"
    Source="{Binding Path=ImageUrl}"
    Stretch="UniformToFill">
</Image>

Очевидно, что я могу просто выполнить привязку в коде программной части и выполнять там любые проверки, но есть ли способ декларативно предоставить альтернативный URL-адрес для источника изображения, если свойство ImageUrl равно null или пусто?

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

Спасибо!


person Kevin Babcock    schedule 11.04.2009    source источник


Ответы (3)


Есть способ сделать это декларативно, но вам нужно будет написать класс, производный от IValueConverter. После того, как вы это сделаете, вы можете использовать этот класс для выполнения любых проверок, чтобы его вызывали при активации привязки Path.

Пример XAML:

<Image Source="{Binding Path=ImageUrl, Converter={StaticResource YourImagePathConverter}}"/>
person sipsorcery    schedule 11.04.2009
comment
Это маршрут, которым я пошел. Спасибо за предложение! - person Kevin Babcock; 11.04.2009

Почему бы просто не использовать объект, к которому вы привязываетесь, для его обработки?

public string ImageURL
{
  get { return (_ImageURL != string.Empty) ? _ImageURL : _MyDefaultImageURL; }
}
person Charles Graham    schedule 11.04.2009
comment
Я привязываюсь к классу, который автоматически создается из ссылки на службу. Я думаю, я мог бы создать соответствующий частичный класс, который предоставляет новое свойство, которое выполняет эту функциональность, например. общедоступная строка ValidatedImageUrl { ... }. Спасибо за предложение! - person Kevin Babcock; 11.04.2009

Source="{Binding Path=ImageUrl, FallbackValue=DefaultPathHere}" работает в WPF, не уверен, что FallbackValue работает в Silverlight.

http://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase.fallbackvalue.aspx

Небольшое исследование показывает, что FallbackValue доступен в Silverlight 4, но не в предыдущей версии.

person Turntwo    schedule 09.10.2010