Visual studio 2010 WPF 4.0自动完成框双向绑定

Visual studio 2010 WPF 4.0自动完成框双向绑定,visual-studio-2010,entity-framework-4,autocomplete,wpf-controls,binding,Visual Studio 2010,Entity Framework 4,Autocomplete,Wpf Controls,Binding,我有一个WPF窗口,它有几个Listbox和DataGrid控件。主列表框显示承包商列表。数据网格的地址绑定到承包商列表框,并显示当前选定承包商的地址 我希望此窗口(WPF)的用户能够使用本机Datagrid添加功能向选定的承包商添加地址。我还希望用户能够通过单击datagrid单元格并将单元格功能作为自动完成框来编辑相关的地址记录 我已经在datagrid控件的State列中部分成功地实现了AutoCompleteBox。当前,当前承包商的正确文本值显示在地址数据网格的状态列中。如果我编辑状态

我有一个WPF窗口,它有几个Listbox和DataGrid控件。主列表框显示承包商列表。数据网格的地址绑定到承包商列表框,并显示当前选定承包商的地址

我希望此窗口(WPF)的用户能够使用本机Datagrid添加功能向选定的承包商添加地址。我还希望用户能够通过单击datagrid单元格并将单元格功能作为自动完成框来编辑相关的地址记录

我已经在datagrid控件的State列中部分成功地实现了AutoCompleteBox。当前,当前承包商的正确文本值显示在地址数据网格的状态列中。如果我编辑状态单元格,我将获得预期的自动完成功能,并且我可以选择一个新状态

不起作用的是双向绑定。当前,如果我更改当前地址状态,它不会保存回实体模型或数据库。这并不奇怪,因为我知道我没有在这个控件上正确实现双向绑定

我已经用combobox成功地实现了双向绑定,但是combobox显然没有提供我需要的自动完成功能

使现代化 昨天晚些时候,我们对此进行了研究,并得出了部分解决方案。现在我们有了一个新问题

使用组合框,您可以拥有: DisplayMemberPath=“StateAbbrv” SelectedValue=“{Binding Path=tbl_Address.StateID,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}”和
SelectedValuePath=“StateID”

使用AutoCompleteBox,您似乎只有: ValueMemberPath=“StateID”和 Text=“{Binding Path=tbl_Address.StateID,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource StateConverter}}”Grid.Column=“1”Grid.Row=“1”Margin=“0,0,0,0”>

使用AutoCompleteBox,您不能有单独的显示和选定值。由于我的窗口控件绑定和数据库结构,我需要显示一个字符串值,例如“CA California”,同时在后台实际显示一个选定的表键整数值

为了清楚起见,我们需要在AutoCompleteBox控件的文本部分中分别显示和选择值

以下是显示承包商的主列表框:

    <Grid DataContext="{StaticResource tbl_PartnerViewSource}" HorizontalAlignment="Left" Name="grid3" VerticalAlignment="Top" Height="242" Width="295" Grid.Column="1" Margin="0,1,0,0" Grid.Row="3">
        <Grid.RowDefinitions>
            <RowDefinition Height="31*" />
            <RowDefinition Height="211*" />
        </Grid.RowDefinitions>
        <Label Content="Contractor List" FontWeight="Bold" Height="25" Margin="0,0,169,0" Name="label10" Padding="3" VerticalAlignment="Top" />
        <ListBox DisplayMemberPath="tbl_Organization.OrgName" Height="212" HorizontalAlignment="Right" ItemsSource="{Binding}" Margin="0,30,0,0" Name="orgNameListBox" SelectedValuePath="PtnrID"  VerticalAlignment="Center" Width="294" IsSynchronizedWithCurrentItem="True" Grid.RowSpan="2" SelectionChanged="orgNameListBox_SelectionChanged" TabIndex="11" MouseDoubleClick="orgNameListBox_MouseDoubleClick" DataContextChanged="orgNameListBox_DataContextChanged" SourceUpdated="orgNameListBox_SourceUpdated" IsManipulationEnabled="True" />
    </Grid>

下面是堆栈面板,其中包含支持讨论中控件的Datacontext:

<StackPanel Grid.Row="3" Height="243" HorizontalAlignment="Left" Name="stackPanel5" VerticalAlignment="Top" Width="295" Grid.Column="1"></StackPanel>
    <Label Content="Address(s)" FontWeight="Bold" Height="25" HorizontalAlignment="Left" Margin="306,0,0,0" Name="label1" Padding="3" VerticalAlignment="Top" Width="648" Grid.Column="1" Grid.Row="1" />
    <DataGrid Name="dataGridAddress" DataContext="{StaticResource tbl_Partnertbl_PartnerAddressViewSource}"  ItemsSource="{Binding}" SelectionMode="Single" SelectionUnit="CellOrRowHeader" AutoGenerateColumns="False" AlternatingRowBackground="#FFFF003B" AlternationCount="2" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Left" Margin="308,22,0,0" Width="649" Height="113" VerticalAlignment="Top" CanUserDeleteRows="True" CanUserAddRows="True">
        <DataGrid.Columns>...

...
以下是部分工作的自动完成框:

<DataGridTemplateColumn x:Name="addState" Header="State" Width="100">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <my1:AutoCompleteBox Name="autoCompleteBox1" 
                                                 IsTextCompletionEnabled="True" 
                                                 ItemsSource="{Binding Source={StaticResource tbl_StateViewSource}}"
                                                 ValueMemberPath="StateID"
                                                 Text="{Binding Path=tbl_Address.StateID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Column="1" Grid.Row="1" Margin="0,0,0,0" >
                                <my1:AutoCompleteBox.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel Orientation="Horizontal">
                                            <TextBlock Text="{Binding Path=StateAbbrv}" Width="30" FontWeight="Bold" Margin="0,0,0,0" />
                                            <TextBlock Text="{Binding Path=StateName}" />
                                        </StackPanel>
                                    </DataTemplate>
                                </my1:AutoCompleteBox.ItemTemplate>
                            </my1:AutoCompleteBox>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

以下是具有双向绑定的组合框:

<GridViewColumn x:Name="addrState" Header="State" Width="75">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <ComboBox Name="comboAddressState" SelectedValue="{Binding Path=tbl_Address.StateID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  Margin="{StaticResource Margin2}" DisplayMemberPath="StateAbbrv" SelectedValuePath="StateID" ItemsSource="{Binding Source={StaticResource tbl_StateViewSource}}" IsSynchronizedWithCurrentItem="False" IsEnabled="True" />
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>

以下是Windows.Resource部分:

 <Window.Resources>
    <CollectionViewSource x:Key="tbl_PartnerViewSource" d:DesignSource="{d:DesignInstance my:tbl_Partner, CreateList=True}"></CollectionViewSource>
    <CollectionViewSource x:Key="tbl_Partnertbl_PartnerAddressViewSource" Source="{Binding Path=tbl_PartnerAddress, Source={StaticResource tbl_PartnerViewSource}}" />
    <CollectionViewSource x:Key="tbl_Partnertbl_PartnerContactViewSource" Source="{Binding Path=tbl_PartnerContact, Source={StaticResource tbl_PartnerViewSource}}" />
    <CollectionViewSource x:Key="tbl_Partnertbl_PartnerContacttbl_PartnerContactCommChanAddrViewSource" Source="{Binding Path=tbl_PartnerContactCommChanAddr, Source={StaticResource tbl_Partnertbl_PartnerContactViewSource}}" />
    <CollectionViewSource x:Key="tbl_Partnertbl_PartnerSystemViewSource" Source="{Binding Path=tbl_PartnerSystem, Source={StaticResource tbl_PartnerViewSource}}" />
    <CollectionViewSource x:Key="tbl_Partnertbl_PartnerAliasViewSource" Source="{Binding Path=tbl_PartnerAlias, Source={StaticResource tbl_PartnerViewSource}}" />
    <CollectionViewSource x:Key="tbl_Partnertbl_PartnerCommentViewSource" Source="{Binding Path=tbl_PartnerComment, Source={StaticResource tbl_PartnerViewSource}}" />
    <CollectionViewSource x:Key="tbl_ServicedCustomerViewSource"  d:DesignSource="{d:DesignInstance my:tbl_ServicedCustomer, CreateList=True}"  />
    <CollectionViewSource x:Key="tbl_SystemViewSource" d:DesignSource="{d:DesignInstance my:tbl_System, CreateList=True}" />
    <CollectionViewSource x:Key="tbl_PlatformViewSource" d:DesignSource="{d:DesignInstance my:tbl_Platform, CreateList=True}" />
    <CollectionViewSource x:Key="tbl_ManufacturerViewSource" d:DesignSource="{d:DesignInstance my:tbl_Manufacturer, CreateList=True}" />
    <CollectionViewSource x:Key="tbl_StateViewSource" d:DesignSource="{d:DesignInstance my:tbl_State, CreateList=True}" />
    <CollectionViewSource x:Key="tbl_ZIPViewSource" d:DesignSource="{d:DesignInstance my:tbl_ZIP, CreateList=True}" />
    <CollectionViewSource x:Key="tbl_CityViewSource" d:DesignSource="{d:DesignInstance my:tbl_City, CreateList=True}" />
    <Thickness x:Key="Margin1">8,-3,-7,-3</Thickness>
    <Thickness x:Key="Margin2">-7,-3,-7,-3</Thickness>
</Window.Resources>

8,-3,-7,-3
-7,-3,-7,-3
以下是窗口(WPF)的图像: