Windows 10 x:绑定到SelectedItem

时间:2015-05-20 19:44:56

标签: c# binding windows-10

我试图将我的Windows RT应用移植到WIndows10并尝试新的绑定x:Bind。

到目前为止,我能够绑定到我的ViewModel属性和其他Viewelements。但现在我试图将TextBox的文本绑定到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"
                             />

我正在尝试

  • Text =&#34; {x:Bind gv_textgroup.SelectedItem.bezeich,Mode = TwoWay}&#34;
  • Text =&#34; {x:Bind textgroup [gv_textgroup.SelectedIndex] .bezeich,Mode = TwoWay}&#34;
    • 其中textgroup是我的viewmodelclass,包含所有元素

但没有一个有用......有什么想法吗?

有人可以解释我该如何处理&#34; DependencyProperty&#34;。我观看了来自&#34; build 2015&#34;并有示例代码。但它没有对我说什么......我是一个很新手......

非常感谢你的帮助

2 个答案:

答案 0 :(得分:11)

我不确定为什么会这样,但如果你创建了一个对象转换器,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的公开示例。

他用日语解释here

答案 1 :(得分:3)

你不能在GridView的SelectedItem上使用x:Bind。这是因为SelectedItem是一个对象,所以它可以是任何东西。 x:绑定需要有实际的类/接口。 x:Bind不使用反射来查找像Binding这样的属性。

您可以通过x完成此操作:将GridView的SelectedItem绑定到视图模型,然后将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}"