【问题标题】:ComboBox Binding Problem with Windows Community Toolkit DatagridWindows Community Toolkit Datagrid 的 ComboBox 绑定问题
【发布时间】:2019-08-02 00:12:27
【问题描述】:

假设我有一个绑定到 AreaVM 类型集合的 DataGrid。 AreaVM 有一个名为 InitialSub 的属性,类型为 Sub。组合框的 ItemsSource 是另一个 Sub 类型的集合。

<wct:DataGrid x:Name="grid"
              ItemsSource="{x:Bind ViewModel.Source, Mode=TwoWay}"
              Margin="12"
              FontSize="4"
              AutoGenerateColumns="False"
              GridLinesVisibility="None"
              CanUserResizeColumns="True"
              CanUserSortColumns="True"
              SelectionMode="Extended"
              IsReadOnly="False"
              VerticalScrollBarVisibility="Auto"    
              HorizontalScrollBarVisibility="Auto">
    <wct:DagaGridColumns>
        <wct:DataGridComboBoxColumn Binding="{Binding InitialSub, Mode=TwoWay}" Tag="InitialSub"
                            Header="Initial Sub"
                            Width="220"
                            ItemsSource="{x:Bind ViewModel.SourceForSubsList}"
                            DisplayMemberPath="SubName"
        </wct:DataGridComboBoxColumn>
    </wct:DataGridColumns>
</wct:DataGrid>

为什么我会收到此错误:“ItemsSource 元素不包含属性 InitialSub。请确保已正确设置绑定路径。”有人可以帮忙吗?

页面视图模型的相关部分如下:

public ObservableCollection<Sub> SourceForSubsList { get; set; }

public ObservableCollection<AreaVM> Source
    {
        get => _source;
        set
        {
            _source = value;
        }
    }

AreaVM 包含数据网格每一行的所有属性。这些属性之一是 InitialSub:

 public Subfactor InitialSub
    {
        get => Model.InitialSub;
        set
        {
            if (value != Model.InitialSub && value != null)
            {
                Model.InitialSub = value;
                RaisePropertyChanged(nameof(InitialSub));                     
            }
        }
    }

如果我不包含 ComboBox 列,DataGrid 会正确加载。

我将 ComboBox XAML 更改为此,但仍然收到相同的错误:

<wct:DataGridComboBoxColumn Binding="{Binding InitialSub, Mode=TwoWay}" 
                            Header="Initial Sub"
                            Width="220"
                            DisplayMemberPath="SubName"    
                            ItemsSource="{x:Bind ViewModel.SourceForSubsList}"
                            Visibility="{x:Bind ViewModel.ShowInitialCoreColumns, Mode=OneWay, Converter={StaticResource boolToVisConverter}}">
</wct:DataGridComboBoxColumn>

SubName 属性是一个字符串。就像 DisplayMemberPath 被忽略一样。我仍然得到这个:“ItemsSource 元素不包含属性 InitialSub。确保已正确设置绑定路径。”

【问题讨论】:

  • 嗨,马特,我没有看到你将 InitialCoreFindingSubfactor 绑定到 ItemsSource,我无法重现你的问题,你能介意分享 minimal reproducible example 吗?
  • 谢谢,尼科。抱歉,错误消息应该是““ItemsSource 元素不包含属性 InitialSub。”我还添加了显示 DataGrid 设置的 XAML。
  • ViewModel 是否包含 SourceForSubsList 字段?你能展示你的视图模型吗?
  • 确实如此。我已经添加了上面的视图模型。谢谢。
  • 我发现了你的问题,你需要将 SourceForSubsList 转换为 string List 或将DisplayMemberPath 直接转换为 Sub 类的字符串属性。

标签: xaml uwp datagrid windows-community-toolkit


【解决方案1】:

我终于得到了这个工作。我尝试将整个网格的 ItemsSource 绑定从“x:Bind”更改为“Binding”。这解决了问题,但我不知道为什么。

我为 ComboBox 使用了以下内容:

<wct:DataGridComboBoxColumn 
    Binding="{Binding InitialSub, Mode=TwoWay}" 
    Tag="InitialSub"                                            
    Header="Initial Sub"                                              
    Width="220"                                           
    IsReadOnly="False"                                                
    ItemsSource="{x:Bind ViewModel.SourceForSubsList}">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-24
    • 2018-03-20
    • 2013-08-06
    • 2011-06-27
    • 2020-07-20
    • 2021-07-07
    • 2021-03-29
    • 1970-01-01
    相关资源
    最近更新 更多