如何在WPF c#中显示和选择数据网格组合框中的项目,使用MVVM

本文关键字:组合 网格 项目 MVVM 使用 数据网 数据 WPF 显示 选择 | 更新日期: 2023-09-27 18:18:34

我希望能够选择"真"或"假"(布尔值)从一个组合框,是在一个wpf数据网格,并能够将选择保存到我的数据库。

我希望能够指示列内部,如果行是"活动"或不通过一个布尔变量保存到我的数据库作为一个位(1 = true;0 = false).

下面是我的create table语句:Create Table Statement(AccountType)

我使用ObservableCollection填充数据网格,如下所示:

protected override void Get()
{
    using (var dbContext = new IEMASEntitiesDataContext())
    {
        var accountType = from s in dbContext.AccountTypes select s;
        var observable = new  ObservableCollection<AccountType>(accountType);
        Collection = observable;
    }
}
我的XAML代码如下:
<DockPanel DataContext="{StaticResource ResourceKey=AccountTypeViewModel}" LastChildFill="True">
    <ToolBar DockPanel.Dock="Top">
        <Button Content="Display"  Command="{Binding GetCommand}" Width="78"/>
        <Button Content="Save" Command="{Binding SaveCommand}" Width="78"/>
    </ToolBar>
    <Grid>
        <GroupBox x:Name="AccountTypeGroupBox">
            <DataGrid x:Name="DataGridAccountType" ItemsSource="{Binding Collection}" AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTextColumn  Header="AccountType" Width="150" Binding="{Binding Path=AccountTypeName, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"/>
                    <DataGridComboBoxColumn  Header="Active" Width="100" SelectedValueBinding="{Binding StatusList, UpdateSourceTrigger=PropertyChanged}" SelectedValuePath="AccountTypeId" DisplayMemberPath="Active"/>                   
                    <DataGridTemplateColumn Width="50" Header="Delete">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Button x:Name="btnDelete" Content="Delete" Command="{Binding DeleteCommand}"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
        </GroupBox>          
    </Grid>
</DockPanel>

它不工作。组合框内没有显示任何内容,并且我不知道如何在显示时将所选项目保存到SQL Server数据库。我很感激你的帮助。我正在使用LINQ TO SQL。我是新手:-

如何在WPF c#中显示和选择数据网格组合框中的项目,使用MVVM

正如我所理解的,问题是如何将一些XAML资源绑定为组合ItemsSource,以及如何将组合的选定值绑定到DataGrid行后面的模型。1. 列表项:

<Window x:Class="SoDataGridProjectsHelpAttempt.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:soDataGridProjectsHelpAttempt="clr-namespace:SoDataGridProjectsHelpAttempt"
    xmlns:system="clr-namespace:System;assembly=mscorlib"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <x:Array x:Key="CountriesArray" Type="soDataGridProjectsHelpAttempt:Country">
        <soDataGridProjectsHelpAttempt:Country CountryName="Germany" CountryPop="150k"/>
        <soDataGridProjectsHelpAttempt:Country CountryName="France" CountryPop="125k"/>
        <soDataGridProjectsHelpAttempt:Country CountryName="Belarus" CountryPop="165k"/>
    </x:Array>
    <x:Array x:Key="StatusArray" Type="soDataGridProjectsHelpAttempt:ActivityStatus">
        <soDataGridProjectsHelpAttempt:ActivityStatus VerbalStatus="Yes" BoolStatus="True"/>
        <soDataGridProjectsHelpAttempt:ActivityStatus VerbalStatus="No" BoolStatus="False"/>
    </x:Array>
</Window.Resources>
<Window.DataContext>
    <soDataGridProjectsHelpAttempt:DataGridMainDataContext/>
</Window.DataContext>
<Grid>
    <DataGrid ItemsSource="{Binding Collection}" AutoGenerateColumns="False" CanUserAddRows="True">
        <DataGrid.Columns>
            <DataGridTextColumn     Width="Auto" Binding="{Binding UName}"/>
            <DataGridComboBoxColumn Header="Country" DisplayMemberPath="CountryName"
                                    ItemsSource="{StaticResource CountriesArray}" Width="Auto"
                                    SelectedItemBinding="{Binding CountryData}"/>
            <!--<DataGridComboBoxColumn Header="ActivityStatus" Width="Auto" ItemsSource="{StaticResource StatusArray}" 
                                    SelectedValueBinding="{Binding IsActive}" SelectedValuePath="BoolStatus" DisplayMemberPath="VerbalStatus"/>-->
            <DataGridComboBoxColumn Header="ActivityStatus" SelectedItemBinding="{Binding IsActive, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
                <DataGridComboBoxColumn.ItemsSource>
                    <x:Array Type="system:Boolean">
                        <system:Boolean>True</system:Boolean>
                        <system:Boolean>False</system:Boolean>
                    </x:Array>
                </DataGridComboBoxColumn.ItemsSource>
            </DataGridComboBoxColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

  • DataGrid viewmodel:

    public class DataGridMainDataContext
    

    {公共DataGridMainDataContext (){Collection = new ObservableCollection(新列表){新用户数据{UName = "Greg",IsActive = false,},新用户数据{UName = "Joe",IsActive = false,},新用户数据{UName = "Iv",IsActive = false,}});

    }
    public ObservableCollection<UserData> Collection { get; set; }
    

    }

  • 模型:公共类UserData: BaseObservableObject{私有字符串_uName;私有对象_countryData;private bool _isActive;

    public bool IsActive
    {
        get { return _isActive; }
        set
        {
            _isActive = value;
            OnPropertyChanged();
        }
    }
    public string UName
    {
        get { return _uName; }
        set
        {
            _uName = value;
            OnPropertyChanged();
        }
    }
    public object CountryData
    {
        get { return _countryData; }
        set
        {
            _countryData = value;
            OnPropertyChanged();
        }
    }
    

    }

    公共类ActivityStatus:BaseObservableObject{private bool _boolStatus;private string _verbalStatus;

    public bool BoolStatus
    {
        get { return _boolStatus; }
        set
        {
            _boolStatus = value;
            OnPropertyChanged();
        }
    }
    public string VerbalStatus
    {
        get { return _verbalStatus; }
        set
        {
            _verbalStatus = value;
            OnPropertyChanged();
        }
    }
    

    }

    公共类国家:BaseObservableObject{私有字符串_countryName;private string _countryPop;

    public string CountryName
    {
        get { return _countryName; }
        set
        {
            _countryName = value;
            OnPropertyChanged();
        }
    }
    public string CountryPop
    {
        get { return _countryPop; }
        set
        {
            _countryPop = value;
            OnPropertyChanged();
        }
    }
    public Country() { }
    public Country(string n, string d)
    {
        this.CountryName = n;
        this.CountryPop = d;
    }
    

    }

  • 认为,