gpt4 book ai didi

wpf - 如何将自动完成框添加到数据网格?

转载 作者:行者123 更新时间:2023-12-04 16:47:33 25 4
gpt4 key购买 nike

我的应用程序中有一个数据网格,有两列四行。每个单元格都需要是 WPF Toolkit 自动完成框控件。我想使用 MVVM 模式来实现整个事情。用文本框填充单元格很容易:

<DataGrid ItemsSource="{Binding viewModel, Path=Fields}"  AutoGenerateColumns="False" CanUserResizeColumns="True" CanUserSortColumns="True" AlternatingRowBackground="Gainsboro">
<DataGrid.Columns>
<DataGridTextColumn Header="Predicate" Binding="{Binding Key}"/>
<DataGridTextColumn Header="Value" Binding="{Binding Value}"/>
</DataGrid.Columns>
</DataGrid>

但是由于某种原因,尝试对自动完成框做同样的事情是行不通的。它编译并运行,但键入时自动完成框未打开。我用了:
<DataGrid ItemsSource="{Binding viewModel, Path=Fields}"  AutoGenerateColumns="False" CanUserResizeColumns="True" CanUserSortColumns="True" AlternatingRowBackground="Gainsboro">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Pre">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<wpfToolkit:AutoCompleteBox ItemsSource="{Binding viewModel, Path=AvailableFields}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>

绑定(bind)属性的定义是:
public IEnumerable<KeyValuePair<string, string>> Fields
public IEnumerable<string> AvailableFields

有任何想法吗?

更新 :以下是基于@Damascus 回复的整个 XAML。由于某种原因也不起作用。
<UserControl x:Class="IKB.Views.IKBInputView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:vm="clr-namespace:IKB.ViewModels"
xmlns:wpfToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<vm:IKBInputVM x:Key="viewModel" />
</UserControl.Resources>
<StackPanel Orientation="Vertical">
<DataGrid ItemsSource="{Binding viewModel, Path=Fields}" AutoGenerateColumns="False" CanUserResizeColumns="True" CanUserSortColumns="True" AlternatingRowBackground="Gainsboro">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Pre">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<wpfToolkit:AutoCompleteBox ItemsSource="{Binding DataContext.viewModel.AvailableFields, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</UserControl>

最佳答案

那是因为你们不在同一个DataContext这里。

每个AutoCompleteBox会有自己的DataContext (不确定它的确切位置,但它与当前单元格本身有关),因此它会在错误的位置查找 ItemsSource。

您的 Binding必须引用原始的DataContext。
假设此 DataGrid 在 UserControl 中,请尝试:

<wpfToolkit:AutoCompleteBox ItemsSource="{Binding DataContext.viewModel.AvailableFields,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}} />

这应该可以解决问题(它现在将查看 UserControl 的 DataContext,这是您正在使用的那个)

关于wpf - 如何将自动完成框添加到数据网格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5741886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com