我将UserControl绑定到DataGrid的方式是否正确? 在我的MainWindow中,我有一个datagrid(下面的代码):
<DataGrid x:Name="MusicListGrid" ItemsSource="{Binding MusicList}" AutoGenerateColumns="False" IsSynchronizedWithCurrentItem="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Artist" Binding="{Binding Artist,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
<DataGridTextColumn Header="Album" Binding="{Binding Album,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
<DataGridTextColumn Header="Track" Binding="{Binding Track,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
</DataGrid.Columns>
</DataGrid>
我的MainWindow中的usercontrol,我绑定到datagrid的选定项目:
DataTemplate(在MainWindow中):
<Window.Resources>
<DataTemplate x:Key="MusicDetailListTemplate" >
<v:MusicDetailView DataContext="{Binding ElementName=MusicListGrid,Path=SelectedItem}" />
</DataTemplate>
</Window.Resources>
ContentControl(在MainWindow中):
<ContentControl x:Name="musicDetail" Content="{Binding}" ContentTemplate="{StaticResource MusicDetailListTemplate}" Grid.Column="1" />
我的UserControl中的文本框如下所示:
<TextBox Grid.Column="1" Grid.Row="0" Width="200" Margin="10,5" Text="{Binding Artist,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
<TextBox Grid.Column="1" Grid.Row="1" Width="200" Margin="10,5" Text="{Binding Album,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
<TextBox Grid.Column="1" Grid.Row="2" Width="200" Margin="10,5" Text="{Binding Track,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
这有效,但我不确定我是否采取了正确的方法? 我还可以将文本框绑定到数据网格,如下所示:
<TextBox Grid.Column="1" Grid.Row="3" Text="{Binding Path=MusicListGrid.Artist.SelectedItem, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}" />
数据网格中的数据是ObservableCollection<Music>
(音乐是我的模型)。
如果我用tabcontrol替换我的UserControl,我应该将tabcontrol作为单独的视图还是只是MainWindow的一部分?并且tabcontrol的内容是单独的视图吗?我正在考虑使用datagrid和带有2个选项卡的tabcontrol,一个用于编辑,另一个用于显示(看起来更具代表性)。
对不起,如果这些是非常基本的问题,我只想走正确的道路。
答案 0 :(得分:2)
将Content
元素的ContentControl
属性设置为数据对象更为常见:
<ContentControl x:Name="musicDetail" Content="{Binding ElementName=MusicListGrid,
Path=SelectedItem}" ContentTemplate="{StaticResource MusicDetailListTemplate}" />
DataContext
定义相关类型的数据在UI中应该是什么样的,所以你不应该真正设置DataContext
......它会自动设置为相关的数据对象实例...它应该看起来更像这样(其中Prefix
是您为项目设置的XML命名空间前缀,YourClass
是DataGrid
中对象的类型:< / p>
<Window.Resources>
<DataTemplate x:Key="MusicDetailListTemplate" DataType="{x:Type Prefix:YourClass}">
<v:MusicDetailView DataContext="{Binding}" />
</DataTemplate>
</Window.Resources>