【发布时间】:2020-12-11 10:32:24
【问题描述】:
我正在使用 MVVM 并将 DataGrid 绑定到 ObservableCollection<CustomClass>。我可以成功地做到这一点,但是我希望DataGrid 列之一是ComboBox 列,项目源为List<ComboBoxValues>。此外,另一列必须是 ToggleSwitch,其中带有参数的 Command 在 IsOn 属性更改值时被触发。
在 ViewModel 中:
public ObservableCollection<CustomClass> DataGridData { get; set; } = new ObservableCollection<CustomClass>();
public List<ComboBoxValues> ListValues { get; set; } = new List<ComboBoxValues>();
public MyICommand<ToggleSwitch> ToggleSwitchToggled_Command { get; private set; }
我遇到的问题是DataGrid 的ItemsSource Binding 覆盖了CombobBox 的ItemsSource 的Binding 路径以及Command 的@ 987654339@。在DataGridData 中查找ListValues 和ToggleSwitchToggled_Command。
例如:
错误:BindingExpression 路径错误:在“UWPProject.ViewModels.DataGridData”上找不到“ListValues”属性。 BindingExpression: Path='ListValues' DataItem='UWPProject.ViewModels.DataGridData';目标元素是'Windows.UI.Xaml.Controls.ComboBox'(名称='null');目标属性是“ItemsSource”(类型“对象”)
在 Xaml 中:
<controls:DataGrid GridLinesVisibility="All"
AlternatingRowBackground="Gray" AutoGenerateColumns="False"
ItemsSource="{Binding DataGridData,Mode=TwoWay}">
<controls:DataGrid.Columns>
<controls:DataGridTextColumn Header="TextOne" Binding="{Binding aPropertyOneInDataGridData,Mode=TwoWay}"/>
<controls:DataGridTextColumn Header="TextTwo" Binding="{Binding aPropertyTwoInDataGridData,Mode=TwoWay}"/>
<controls:DataGridTemplateColumn Header="ComboBoxHeader">
<controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<ComboBox ItemsSource="{Binding ListValues}"
SelectedValue="{Binding aPropertyThreeInDataGridData,Mode=TwoWay}"
PlaceholderText="Select Action">
</ComboBox>
</StackPanel>
</DataTemplate>
</controls:DataGridTemplateColumn.CellTemplate>
</controls:DataGridTemplateColumn>
<controls:DataGridTemplateColumn Header="ToggleSwitch_Header">
<controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<ToggleSwitch x:Name="ToggelSwitch_Run"
IsOn="{Binding aPropertyFourInDataGridData,Mode=TwoWay}">
<interact:Interaction.Behaviors>
<interactcore:EventTriggerBehavior EventName="Toggled">
<interactcore:InvokeCommandAction Command="{Binding ToggleSwitchToggled_Command}"
CommandParameter="{Binding}"/>
</interactcore:EventTriggerBehavior>
</interact:Interaction.Behaviors>
</ToggleSwitch>
</StackPanel>
</DataTemplate>
</controls:DataGridTemplateColumn.CellTemplate>
</controls:DataGridTemplateColumn>
</controls:DataGrid.Columns>
</controls:DataGrid>
所以我想,问题是,如何拆分在父 DataGrid 中查找 Binding 的“源”或路径。这方面有很多WPF的问答,比如here和here。但是我不能使用DataContext,因为我收到“DataContext is not supported in a UWP project”的错误。我找不到针对此问题的 UWP 项目的解决方案。另外,我使用的是 MVVM 并且没有后面的代码,所以我不相信我可以使用x:Binding。我也不想在后面使用代码。
请帮忙。
【问题讨论】:
-
以下答案是否有效,您有任何更新吗?
标签: c# xaml uwp datagrid datagridtemplatecolumn