我是WPF的新手,并且整天都在尝试解决此问题:
我有一个包含六个公共属性的列表(有关仅将wpf绑定到公共属性的信息)。
在主窗口中,我有两个控件。一个具有三列和三个文本框的数据网格。我希望将三个datagrid列数据绑定到列表的三个属性,并将列表的其余三个属性数据绑定到文本框(每个文本框一个属性)。datagrid数据绑定工作正常:myDataGrid.ItemsSource = myList; //specific column binding is in xaml as expected eg Binding="{Binding Title, Mode=TwoWay}"
问题出在文本框上。我希望文本框在基础列表中显示“当前项”,这意味着当用户选择不同的数据网格行时,文本框应更改为显示“当前选择的列表项”的数据绑定属性的值。像这样简单地绑定texbox并不能完成任务:
Text="{Binding SomePropertyName}"
我已经阅读了有关使用CollectionViewSource的信息,以便在xaml绑定中使用正斜杠来方便使用“当前项”指针,但也没有运气,即
<Textbox Text="{Binding Path=/someProperty}"
我还阅读了有关人们使用'elementname'绑定到datagrid / listview项的数据绑定,但这不是我要的。我认为应该很容易,至少在winforms中是如此!
提前致谢。
这很容易,但是有一件事要注意。DataGrid
默认情况下,您可以在中选择多个行,在这种情况下,文本框中将仅显示一个值。您可以通过SelectionMode="Single"
在datagrid上进行设置来更改此设置。
<StackPanel>
<DataGrid x:Name="PersonsGrid" ItemsSource="{Binding Persons}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="First name" Binding="{Binding FirstName}" />
<DataGridTextColumn Header="Last name" Binding="{Binding LastName}" />
<DataGridTextColumn Header="Age" Binding="{Binding Age}" />
</DataGrid.Columns>
</DataGrid>
<TextBox Text="{Binding SelectedItem.Address, ElementName=PersonsGrid}" />
</StackPanel>
之所以有效,是因为在我的示例中SelectedItem
为的基础类型Person
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句