【发布时间】:2014-01-27 22:44:32
【问题描述】:
我将 UserControl 绑定到 DataGrid 的方式是否正确? 在我的 MainWindow 中,我有一个数据网格(下面的代码):
<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>
主窗口中的用户控件,我绑定到数据网格的选定项:
数据模板(在主窗口中):
<Window.Resources>
<DataTemplate x:Key="MusicDetailListTemplate" >
<v:MusicDetailView DataContext="{Binding ElementName=MusicListGrid,Path=SelectedItem}" />
</DataTemplate>
</Window.Resources>
ContentControl(在主窗口中):
<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 的内容是否是单独的视图?我正在考虑让数据网格和一个带有 2 个选项卡的选项卡控件,一个用于编辑,另一个用于显示(看起来更美观)。
对不起,如果这些是非常基本的问题,我只想走在正确的道路上。
【问题讨论】: