wpf 数据网格:将数据网格文本列替换为数据网格模板列-如何使绑定工作

1zmg4dgp  于 2023-02-05  发布在  其他
关注(0)|答案(1)|浏览(149)

我有一个带有几个DataGridTextColumns的WPF数据网格,我想用我自己的自定义控件来调整一个数据网格的空间。但是我不知道如何绑定。

<DataGrid ItemsSource="{Binding Path=Entries, Mode=OneWay}" IsSynchronizedWithCurrentItem="True">      
    <DataGrid.Columns>
        <DataGridTextColumn Header="Comment" Binding="{Binding Path=Comment}" Width="Auto" />
    </DataGrid.Columns>
</DataGrid>

我已将其替换为:

<DataGrid ItemsSource="{Binding Path=Entries, Mode=OneWay}" IsSynchronizedWithCurrentItem="True">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Comment" Width="Auto">
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <StackPanel>
                        <x:customTextBox Text="{Binding Path=Comment}" />
                    </StackPanel>
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock Text="{Binding Path=Comment}" />
                    </StackPanel>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

我也尝试过设置一个RelativeSource,但是没有成功。你有什么建议吗?

3qpi33ja

3qpi33ja1#

这适用于我使用文本框,而不是你的任何控件。

<Window.DataContext>
    <local:MainWindowViewModel/>
</Window.DataContext>
<Grid>
    <DataGrid ItemsSource="{Binding Path=Entries, Mode=OneWay}" IsSynchronizedWithCurrentItem="True"
              AutoGenerateColumns="False"
              >
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Comment" Width="Auto">
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBox Text="{Binding Path=Comment}" />
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock Text="{Binding Path=Comment}" />
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>
</Window>
enter code here

MyItem是我碰巧在一个scratch应用程序中使用的视图模型。

public partial class MainWindowViewModel : ObservableObject
{

    [ObservableProperty]
    private ObservableCollection<MyItem> entries = new ObservableCollection<MyItem>
    (
        new List<MyItem>
        {
             new MyItem{ IsChosen = false},
             new MyItem{ IsChosen = true },
             new MyItem{ IsChosen = true }
        }
    );
}

看起来像

public partial class MyItem : ObservableObject
{
    [ObservableProperty]
    private bool? isChosen;

    [ObservableProperty]
    private string comment = "Some test string";
}

相关问题