C# Windows 10 x:绑定到SelectedItem
我正在尝试将我的Windows RT应用移植/采用到Windows 10,并且正在尝试新的绑定x:Bind 到目前为止,我能够绑定到我的ViewModel属性和其他ViewElement。但现在我正试图将文本框的文本绑定到GridView的SelectedItem 在经典装订中,我就是这样做的C# Windows 10 x:绑定到SelectedItem,c#,binding,windows-10,C#,Binding,Windows 10,我正在尝试将我的Windows RT应用移植/采用到Windows 10,并且正在尝试新的绑定x:Bind 到目前为止,我能够绑定到我的ViewModel属性和其他ViewElement。但现在我正试图将文本框的文本绑定到GridView的SelectedItem 在经典装订中,我就是这样做的 <TextBox x:Name="tb_textgroup" Grid.Row="1"
<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
非常感谢您的帮助您不能在GridView的SelectedItem上使用x:Bind。这是因为SelectedItem是一个对象,所以它可以是任何对象。x: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}"
公共类视图模型
{
公共MyItem SelectedItem{get;set;}//fire道具已更改
}
我不知道为什么会这样,但如果您创建一个对象到对象转换器,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}}"
...
恐怕你是对的。但我认为这真的是一个微不足道的角色,你不能把它从一个对象投射到你的类中。不管怎样,我希望微软能像他们在构建中提到的那样改进这项技术(我想我在视频中读过/听到过)。感谢您的时间,他们怎么可能知道您想要的对象是什么。x:Bind是一个编译时指令。这意味着它将在编译时创建绑定到对象/属性的代码。您不能期望编译器知道您希望对象的类型为MyObject。可能是这样的:实际上,viewmodel属性可以是普通对象。。。除非你用的是转换器,否则它必须是。DataTemplate的x:DataType表示对象实际应该是什么类型的类。这并没有改变您不能将x:bind绑定到其他xaml元素属性的事实。这是因为当编译器看到绑定有转换器时,它会忽略可能存在类型冲突的事实,并允许代码存在运行时异常的风险。