Sea*_*een 4 c# data-binding wpf xaml mvvm
<DataGrid ItemsSource="{Binding FilesToAdd}" Height="100" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" MaxHeight="100" AutoGenerateColumns="False" Visibility="{Binding FilesAreQueued, Converter={StaticResource BoolToVisConverter}}">
<DataGrid.Resources>
<app:BindingProxy x:Key="Proxy" Data="{Binding}"/>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Header="File Will be Uploaded As" Binding="{Binding FileDisplayText}"/>
<DataGridTextColumn Header="Size" Binding="{Binding FileSizeInText}"/>
<DataGridComboBoxColumn ItemsSource="{Binding AvailableDocumentTypes}" Header="Document Type" Visibility="{Binding Data.DocumentTypesAreRequired, Converter={StaticResource BoolToVisConverter}, Source={StaticResource Proxy} }">
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
根据凯文的建议,我尝试过:
<DataGridComboBoxColumn ItemsSource="{Binding DataContext.AvailableDocumentTypes, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window }}}" Header="Document Type" Visibility="{Binding Data.DocumentTypesAreRequired, Converter={StaticResource BoolToVisConverter}, Source={StaticResource Proxy} }"/>
Run Code Online (Sandbox Code Playgroud)
还试过:
<DataGridComboBoxColumn ItemsSource="{Binding Path=DataContext.AvailableDocumentTypes, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window }}}" Header="Document Type" Visibility="{Binding Data.DocumentTypesAreRequired, Converter={StaticResource BoolToVisConverter}, Source={StaticResource Proxy} }"/>
Run Code Online (Sandbox Code Playgroud)
但是我收到找不到它的错误。
仅供参考,我的 DataContext 设置如下:
在 XAML 中:
<Window x:Class="VEUploader.WPF.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:app="clr-namespace:VEUploader.WPF"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
Title="{Binding WindowTitle}" SizeToContent="WidthAndHeight"
DataContext="{StaticResource UploaderViewModel}"
AllowDrop="True"
>
Run Code Online (Sandbox Code Playgroud)
在代码中(这样我就可以进行依赖注入):
public MainWindow()
{
var uploaderViewModel = new UploaderViewModel(ObjectFactory.GetInstance<IVEDocumentService>(), ObjectFactory.GetInstance<IArgumentSettingsRetriever>(), ObjectFactory.GetInstance<IVEBudgetService>());
Resources["UploaderViewModel"] = uploaderViewModel;
InitializeComponent();
}
Run Code Online (Sandbox Code Playgroud)
我面前没有编译器,但我相信语法看起来像这样:
{Binding DataContext.MyProperty, RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type MyParentControl}}}
Run Code Online (Sandbox Code Playgroud)
编辑:实际上我自己做了一些测试,由于某种原因DataGridComboBoxColumn无法找到项目源,但如果你模板你自己的组合框列,它工作得很好。不知道为什么会这样,但这可能是一个可以接受的解决方法。
<Window x:Class="WPFTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid ItemsSource="{Binding FilesToAdd}" >
<DataGrid.Columns>
<DataGridTemplateColumn Header="Document Type">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox
ItemsSource=
"{Binding DataContext.AvailableDocumentTypes,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window }}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2946 次 |
| 最近记录: |