Windows 10 x:Bind to SelectedItem
本文关键字:to SelectedItem Bind Windows | 更新日期: 2023-09-27 17:50:14
我正在尝试移植/采用我的Windows RT应用程序到WIndows10,我正在尝试新的绑定x:Bind。
到目前为止,我能够绑定到我的ViewModel属性和其他视图。但现在我正试图将文本框的文本绑定到GridView的SelectedItem。在经典的绑定中,我是这样做的。
<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"
/>
我试着用
- 文本= " {x:绑定gv_textgroup.SelectedItem。bezeich模式= TwoWay}"
- 文本= " {x:绑定textgroup [gv_textgroup.SelectedIndex]。bezeich模式= TwoWay}"
- 其中textgroup是我的viewmodelclass与所有元素
但是这些都不起作用…什么好主意吗?
谁能告诉我如何处理"DependencyProperty"?我观看了"build 2015"的视频,并获得了示例代码。但它什么也没对我说……我是个新手……
非常感谢您的帮助
我不确定为什么会这样,但是如果您创建一个对象到对象转换器,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提供的公共示例。
他在这里用日语解释。
不能在GridView的SelectedItem上使用x:Bind。这是因为SelectedItem是一个对象,所以它可以是任何东西。Bind需要有实际的类/接口。x:Bind不像Binding那样使用反射来查找属性。
你可以通过x:Bind GridView的SelectedItem到你的视图模型,然后x:Bind到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}"