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}"