Windows Community Toolkit Datagrid的ComboBox绑定问题

时间:2019-08-02 00:12:27

标签: xaml uwp datagrid windows-community-toolkit

比方说,我有一个绑定到AreaVM类型集合的DataGrid。 AreaVM具有名为Sub类型的InitialSub属性。组合框的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。请确保已正确设置绑定路径。”

1 个答案:

答案 0 :(得分:0)

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

我将以下内容用于组合框:

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