2016-03-20 16 views
1

C#, WPF ve Entity Framework (önce veritabanı) kullanarak veritabanı verilerini işlemek için uygulama oluşturmaya çalışıyorum. Bu yöntemleri öğrenmek için SQL Server ve Northwind veritabanını arka uç olarak kullanan küçük bir örnek uygulama oluşturdum (bu resme bakın tinypic.com/r/1zl6d0x/9).WPF ve Varlık Çerçevesi'ni kullanarak arama combobox için bağlama ayarlama

Siparişleri ve sipariş ayrıntılarını datagrids kullanarak görüntülemek için basit bir form oluşturdum. Artık sipariş almak için müşteriyi seçmek üzere açılan kutuyu kullanmak istiyorum ancak açılan kutu için arama ayarlaması konusunda sorun yaşıyorum. Artık müşteri combobox'ında yanlış değer gösteriliyor ve eğer değer değiştirilirse, seçilen değer tüm satırlara değiştiriliyor (bu resimde görülen tinypic.com/r/2mnejac/9). O combobox doğru müşteriye gösterecek şekilde

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:NorthTest" 
     mc:Ignorable="d" 
     x:Class="NorthTest.MainWindow" 
     Loaded="Window_Loaded"> 
    <Window.Resources> 
     <CollectionViewSource x:Key="ordersViewSource" /> 
     <CollectionViewSource x:Key="customersViewSource" /> 
     <CollectionViewSource x:Key="ordersOrder_DetailsViewSource" 
           Source="{Binding Order_Details, Source={StaticResource ordersViewSource}}" /> 
    </Window.Resources> 
    <Grid DataContext="{StaticResource ordersViewSource}"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="214*" /> 
      <RowDefinition Height="291*" /> 
     </Grid.RowDefinitions> 
     <DataGrid x:Name="ordersDataGrid" 
        AutoGenerateColumns="False" 
        EnableRowVirtualization="True" 
        ItemsSource="{Binding}" 
        RowDetailsVisibilityMode="VisibleWhenSelected"> 
      <DataGrid.Columns> 
       <DataGridTemplateColumn x:Name="orderIDColumn" 
             Header="Order ID" 
             Width="SizeToHeader"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <Label Content="{Binding OrderID}" /> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
       <DataGridTemplateColumn x:Name="customerIDColumn" 
             Header="Customer ID" 
             Width="SizeToHeader"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <ComboBox ItemsSource="{Binding Source={StaticResource customersViewSource}}" 
             DisplayMemberPath="CustomerID" 
             SelectedItem="{Binding Path=Customers}"/> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
       <DataGridTemplateColumn x:Name="customerIDColumn2" 
             Header="Customer ID2" 
             Width="SizeToHeader"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <Label Content="{Binding CustomerID}" /> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
      </DataGrid.Columns> 
     </DataGrid> 

     <DataGrid x:Name="order_DetailsDataGrid" 
        AutoGenerateColumns="False" 
        EnableRowVirtualization="True" 
        ItemsSource="{Binding Source={StaticResource ordersOrder_DetailsViewSource}}" 
        Grid.Row="1" 
        RowDetailsVisibilityMode="VisibleWhenSelected"> 
      <DataGrid.Columns> 
       <DataGridTextColumn x:Name="discountColumn" 
            Binding="{Binding Discount}" 
            Header="Discount" 
            Width="SizeToHeader" /> 
       <DataGridTemplateColumn x:Name="productIDColumn" 
             Header="Product ID" 
             Width="SizeToHeader"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <ComboBox> 
           <ComboBoxItem Content="{Binding ProductID}" /> 
          </ComboBox> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
       <DataGridTextColumn x:Name="quantityColumn" 
            Binding="{Binding Quantity}" 
            Header="Quantity" 
            Width="SizeToHeader" /> 
       <DataGridTextColumn x:Name="unitPriceColumn" 
            Binding="{Binding UnitPrice}" 
            Header="Unit Price" 
            Width="SizeToHeader" /> 
      </DataGrid.Columns> 
     </DataGrid>  
    </Grid> 
</Window> 

nasıl combobox/arama tablosu için bağlama ve viewsources belirlesin:

using System.Windows; 
using System.Windows.Data; 
using System.Data.Entity; 

namespace NorthTest 
{ 
    public partial class MainWindow : Window 
    { 
     NorthwindConnection context; 
     CollectionViewSource ordersViewSource; 
     CollectionViewSource customersViewSource; 

     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void Window_Loaded(object sender, RoutedEventArgs e) 
     { 
      context = new NorthwindConnection(); 
      context.Orders.Load(); 
      context.Customers.Load(); 

      ordersViewSource = ((CollectionViewSource)(this.FindResource("ordersViewSource"))); 
      ordersViewSource.Source = context.Orders.Local; 

      customersViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("customersViewSource"))); 
      customersViewSource.Source = context.Customers.Local; 
     } 
    } 
} 

ve XAML: Ana pencere için an kodu anda

şudur ?

Ben googled ve örneğin baktım. here ve here ancak bunu anlamadım (belki de sadece çok aptalım).

cevap

0

(...) İçinde değerini değiştirirseniz, seçilen değer combobox eklemek istiyorum

Bunu düzeltmek için tüm satırlara değiştirilir:

IsSynchronizedWithCurrentItem="False"