MultiBinding silverlight 4 (баг №2)

Продолжая серию статей Silverlight 4 step by step

Описание проблемы:

Решение проблемы с мультибайдингом я честно нашел в интернете, но справился с ней не сразу. В данной статье я расскажу что вам понадобиться и приведу пример конвертора Concat.


Решение проблемы отсутствия multibinding:

Первое, что вам нужно, это посетить блог scottlogic silverlight multibinding solution for silverlight-4/ – там подробно описано, что и как работает. Я же вам расскажу что конкретно вам нужно.
Второе, если вам не интересно читать английский блог, то просто скачайте SLMultiBindingUpdate.zip – этот проект у меня не запустился, но всё равно нам нужно от туда только 3 файла.

  • BindingUtil.cs
  • IMultiValueConverter.cs
  • MultiBinding.cs

Кидаем их в своей проект. Теперь нам нужно только осуществить байдинг, я вам покажу два способа:
XAML:

                                    <TextBlock>
                                        <SLMultiBinding:BindingUtil.MultiBinding>
                                            <SLMultiBinding:MultiBinding TargetProperty="Text" 
                                                                         Converter="{StaticResource   ConverterConcat}">
                                                <Binding Path="x"/>    
                                                <Binding Path="y"/>             
                                            </SLMultiBinding:MultiBinding>
                                        </SLMultiBinding:BindingUtil.MultiBinding>
                                    </TextBlock>

C# codebehind:
            var textBlock = new TextBlock();

            var binding = new MultiBinding()
                              {
                                  TargetProperty = "Text",
                                  Converter = new Helpers.Converter.ConcatConverter(),
                                  Bindings = new ObservableCollection<Binding>()
                                                 {
                                                     new Binding("x"),
                                                     new Binding("y")
                                                 },
                                  ConverterParameter = "{0}/{1}"

                              };

            SLMultiBinding.BindingUtil.SetMultiBinding(textBlock, binding);

            stack.Children.Add(textBlock);

Подождите не компилируйте, вам ещё нужен мой конвертор ConcatConverter, который просто делает конкатенацию строк.

ConcatConverter:

    public class ConcatConverter : IMultiValueConverter
    {

        public object Convert(object[] values, Type targetType,
          object parameter, System.Globalization.CultureInfo culture)
        {
            var strFormat = (String)parameter;
            if (strFormat == null)
            {
                var builder = new StringBuilder();
                foreach (var value in values)
                {
                    if (value != null)
                        builder.Append(value.ToString());
;
                }
                return builder.ToString();
            }
            else
            {
                for (int i = 0; i < values.Length; i++)
                {
                    var value = values[i];
                    if (value != null)
                        strFormat = strFormat.Replace("{" + i + "}", value.ToString());
                }
                return strFormat;
            }
            
        }

        public object[] ConvertBack(object value, Type[] targetTypes,
          object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }

    }

Конвертор работает, с ConverterParameter(“{0}/{1}”) и без ConverterParameter.

Вот и всё, теперь мы можем работать с мультибайдингом.

Добавить комментарий

Fill in your details below or click an icon to log in:

Логотип WordPress.com

You are commenting using your WordPress.com account. Log Out / Изменить )

Фотография Twitter

You are commenting using your Twitter account. Log Out / Изменить )

Фотография Facebook

You are commenting using your Facebook account. Log Out / Изменить )

Connecting to %s

Follow

Get every new post delivered to your Inbox.