Windows 10 x: привязка к выбранному элементу

Я пытаюсь перенести / перенести мое приложение Windows RT на WIndows10 и пробую новые привязки x:Bind.

Пока что я могу связываться со своими свойствами ViewModel и другими Viewelements. Но сейчас я пытаюсь привязать текст TextBox к SelectedItem GridView.

В классическом переплете я делаю это так.

<TextBox x:Name="tb_textgroup"
                             Grid.Row="1"
                             PlaceholderText="Change Groupname"
                             Text="{Binding UpdateSourceTrigger=PropertyChanged,
                                    ElementName=gv_textgroup,
                                    Mode=TwoWay,Path=SelectedItem.bezeich}"
                             IsEnabled="{Binding UpdateSourceTrigger=PropertyChanged,
                                       ElementName=gv_textgroup,
                                       Mode=TwoWay,Path=SelectedItem.edit_activated}"
                             Margin="20,10,20,0"
                             />

Я пытался это с

  • Text = "{x: Bind gv_textgroup.SelectedItem.bezeich, Mode = TwoWay}"
  • Text = "{x: Bind textgroup [gv_textgroup.SelectedIndex].bezeich, Mode = TwoWay}"
    • где textgroup - мой viewmodelclass со всеми элементами

Но ничего из этого не сработало... есть идеи?

И может кто-нибудь объяснить мне, что делать с "DependencyProperty". Я смотрел viedo из "build 2015" и получил образцы кодов. Но это ничего не говорит мне... Я довольно новичок...

Большое спасибо за вашу помощь

2 ответа

Я не уверен, почему это работает, но если вы создадите конвертер объект-объект, x:Bind работает для двусторонней конвертации на любом SelectedItem,

public class NoopConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return value;
    }
}

И вы можете использовать это так:

<ListView ItemsSource="{x:Bind ViewModel.Items}"
         SelectedItem="{x:Bind ViewModel.SelectedItem, Mode=TwoWay, Converter={StaticResource NoopConverter}}"
         ...

Отдельное спасибо runceel за его публичные образцы.

Он объясняет это здесь по-японски.

Вы не можете использовать x: Bind для SelectedItem GridView. Это потому, что SelectedItem является объектом, поэтому он может быть чем угодно. x: Bind должен иметь реальные классы / интерфейсы. x: Bind не использует отражение для поиска свойств, как Binding.

Вы можете сделать это с помощью x: привязать SelectedItem GridView к вашей модели представления, а затем x: привязать к нему из TextBlock. Я не уверен, что это действительно поможет производительности столько, сколько вы хотели бы.

public class ViewModel
{
    public MyItem SelectedItem { get; set; } //fire prop changed
}

<GridView SelectedItem="{x:Bind SelectedItem, mode=Twoway}"/>
<TextBlock Text="{x:Bind ViewModel.SelectedItem.bezeich}"
Другие вопросы по тегам