将DataGrid绑定到ObservableCollection <Tuple <bool,string >>

时间:2019-12-02 09:57:40

标签: c# wpf data-binding

我想将ObservableCollection<Tuple<bool, string>>绑定到WPF中的DataGrid。

XAML代码段:

<DataGrid Name="AvailableApps" Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="2" Margin="5,30,5,5" ColumnWidth="*" CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False" CanUserSortColumns="False" >
        <DataGrid.Columns>
            <DataGridTextColumn Header="Application" Binding="{Binding Item2}"/>
            <DataGridCheckBoxColumn Header="Selection" Binding="{Binding Item1}"/>
        </DataGrid.Columns>
</DataGrid>

C#代码段:

AvailableApps.ItemsSource = Applications;
AvailableApps.IsReadOnly = false;
AvailableApps.Columns[0].IsReadOnly = true;

当我使用此代码运行应用程序时,出现一个异常,指出TwoWay或OneWay绑定不适用于类型为“ System.Tuple`2 [System.Boolean,System”的“ Item1”的只读属性。字符串]”。

我如何使用ObservableCollection<Tuple<bool, string>>来完成这项工作?

1 个答案:

答案 0 :(得分:0)

Tuple<T1, T2>是不可变的,因此无论是否使用Item1,您都无法设置其DataGrid属性。

因此,如果您希望能够更改DataGrid中的值,则应将源集合的类型从ObservableCollection<Tuple<bool, string>>更改为ObservableCollection<YourClass>,其中YourClass是具有公共可设置的Item1属性(或您选择调用的属性)的类。