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"的视频,并获得了示例代码。但它什么也没对我说……我是个新手……

非常感谢您的帮助

Windows 10 x:Bind to SelectedItem

我不确定为什么会这样,但是如果您创建一个对象到对象转换器,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}"