2014-10-24 2 views
1

Я разрабатываю приложение, которое содержит ListView. Элементы в ListView должны быть либо слева, либо справа от экрана в зависимости от содержимого элемента. Поэтому я создал конвертер для проверки элемента и установки силы тяжести LinearLayout. Преобразователь вызывается, и он возвращается вправо или влево «правильно», но LinearLayout не устанавливается. Линейное Layout является следующее:Droid ValueConverter для LinearLayout Gravity

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="5dp" 
    android:layout_marginBottom="5dp" 
    android:background="#FFFFFF" 
    local:MvxBind="Gravity Content, Converter=MessageAlign"> 

преобразовательной Я пробовал 2 различными способами, один с использованием GravityFlags и других строк:

public class MessageAlignConverter : MvxValueConverter<string, GravityFlags> 
{ 
    protected override GravityFlags Convert(string value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (My Test) 
     { 
      return GravityFlags.Right; 
     } 
     return GravityFlags.Left; 
    } 
} 

public class MessageAlignConverter : MvxValueConverter<string, string> 
{ 
    protected override string Convert(string value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (My Test) 
     { 
      return "right"; 
     } 
     return "left"; 
    } 
} 

Ни один из них работали, поэтому я проверил LinkerPleaseInclude , я попытался добавить в LinkerPleaseInclude, но я не могу получить текущую гравитацию, для кнопки (в качестве примера) я хотел бы сделать:

public void Include(Button button) 
    { 
     button.Click += (s,e) => button.Text = button.Text + ""; 
    } 

Так я представлял себе что-то подобное для LinearLayout:

public void Include(LinearLayout linearLayout) 
    { 
     linearLayout.SetGravity(linearLayout.Gravity?); 
    } 

Есть идеи, как это сделать?

забыл упомянуть выход:

MvxBind:Warning: 6.00 Failed to create target binding for binding Gravity for Content 
[0:] MvxBind:Warning: 6.00 Failed to create target binding for binding Gravity for Content 
10-26 15:43:51.796 I/mono-stdout(11936): MvxBind:Warning: 6.00 Failed to create target binding for binding Gravity for Content 

Спасибо!

+0

Я не знаю этого API, но если нет 'set' для C# собственности' Gravity', то вам нужно для создания пользовательской привязки, которая вызывает 'SetGravity'. Пользовательские привязки просты в использовании - см. Образцы в учебнике N + 1 – Stuart

ответ

2

Во-первых, я думаю, вы должны использовать первую версию конвертера стоимости (один возвращение GravityFlags)

Во-вторых, на выходе приложения, вы видите какой-либо отлаживать текст о том, что он не мог связать к содержимому ? Если вы этого не сделаете, тогда нет причин думать о LinkerPleaseInclude.

В-третьих, вы не указали, как вы определяете ListView в AXML, поэтому убедитесь, что у вас нет проблем с пользовательским интерфейсом. Если вы замените привязку Mvx.Bind на привязку андроида: гравитация к значению, правильно ли отображается элемент?

EDIT: Использование определить свой собственный переплета, чтобы установить вес: In MvvmCross how do I do custom bind properties

+0

Я проверил список, который он работает правильно, я пробовал жестко кодировать гравитацию, и это сработало. Я забыл добавить туда в вопросе выход, он имеет один, вот почему я представил, что он имел отношение к LinkerPleaseInclude, вывод следующий: (я тоже добавлю его в вопрос) MvxBind: Предупреждение: 6.00 Не удалось создать привязку цели для привязки Гравитация для содержимого [0:] MvxBind: Warning: 6.00 Не удалось создать привязку к цели для привязки Гравитация для содержимого 10-26 15: 43: 51.796 I/mono-stdout (11936) : MvxBind: Warning: 6.00 Не удалось создать привязку к цели для привязки Gravity для содержимого. – Daniel

+0

связывается со свойствами. На LinearLayout нет свойства «Gravity», поэтому он не работает –

+0

Я отредактировал свой отзыв со ссылкой –

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