2017-11-24 7 views
0

私は単一のデータベースEstimateInformationTableCATEGORYDESCRIPTIONを持っています。合計100レコード。 100 Descriptionsと10 Categoriesがありますので、明らかにCategoriesが2回以上使用されています。 例:複数のデータセットと複数のコンボボックスを使用してMVVMを相互に結びました

+----------+-------------+ 
| CATEGORY | DESCRIPTION | 
+----------+-------------+ 
| ACC  | DescAAAA | 
| ACC  | DescBBBB | 
| BMX  | DescCCCC | 
+----------+-------------+ 

Iは第コンボボックス(DESCRIPTION)に選択肢を制限するために第1のコンボボックス(CATEGORY)を使用します。

2つのデータセットTableAdaptorsにバインドされた2つのコンボボックスがあります。各TableAdaptorはシンプルですが異なるスキーマを返します。

ComboBox1の:

SELECT DISTINCT CATEGORY 
FROM EstimateInformationTable 
ORDER BY CATEGORY 

ComboBox2:

SELECT DESCRIPTION 
FROM EstimateInformationTable 
WHERE (CATEGORY = @Category) 
ORDER BY DESCRIPTION 

私は一種の、これは余分なButtonClickEventを使用して分離コードで動作するように取得することができますが、明らかにこれは私が欲しいもの、最終的ではありません。

カテゴリコンボボックスを変更すると、説明コンボボックスが更新されるように、MVVMと正しい通知プロパティ(その必要がある場合)を使用します。

これは常に実行する必要がありますが、私はこれを多く受けています。私は進歩を遂げていましたが、私はこれを念頭に置いて苦労しています。これは自己学習の学習練習なので、私のために説明を黙らせてください。おかげで、マイク

XAML:

<Page 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:local="clr-namespace:gobo.Pages" 
     xmlns:gobo="clr-namespace:gobo" x:Class="gobo.Pages.TESTSTUFF01" 
     xmlns:vm="clr-namespace:gobo.ViewModel" 
     mc:Ignorable="d" 

     Title="TESTSTUFF01" Loaded="Page_Loaded"> 
    <Page.Resources> 
     <vm:CategoryChangedViewModel x:Key="CategoryChangedViewModel"/> 
     <gobo:gobo2018DataSet1 x:Key="gobo2018DataSet1"/> 
     <CollectionViewSource x:Key="estimateInformationTableViewSource" Source="{Binding EstimateInformationTable, Source={StaticResource gobo2018DataSet1}}"/> 
     <gobo:gobo2018EstimateInformationTableDescriptionDataSet x:Key="gobo2018EstimateInformationTableDescriptionDataSet"/> 
     <CollectionViewSource x:Key="estimateInformationTableViewSource1" Source="{Binding EstimateInformationTable, Source={StaticResource gobo2018EstimateInformationTableDescriptionDataSet}}"/> 
    </Page.Resources> 


    <Page.Background> 
     <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0"> 
      <GradientStop Color="Black" Offset="0"/> 
      <GradientStop Color="Red" Offset="1"/> 
     </LinearGradientBrush> 
    </Page.Background> 

    <StackPanel Orientation="Vertical" > 
     <Label Content="TEST STUFF 01 Tab Page1" VerticalAlignment="Top" Background="{x:Null}"/> 
     <Button Content="Change Description contents" Click="Button_Click"/> 
     <Grid x:Name="grid1" DataContext="{StaticResource estimateInformationTableViewSource}" HorizontalAlignment="Left" VerticalAlignment="Top"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition Width="Auto"/> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"/> 
      </Grid.RowDefinitions> 
      <Label Content="CATEGORY:" Grid.Column="0" HorizontalAlignment="Left" Margin="3" Grid.Row="0" VerticalAlignment="Center"/> 

      <ComboBox x:Name="cATEGORYComboBox" Grid.Column="1" DisplayMemberPath="CATEGORY" HorizontalAlignment="Left" Height="Auto" Margin="3" Grid.Row="0" VerticalAlignment="Center" Width="120" 
         ItemsSource="{Binding}" 
         SelectedIndex="{Binding Category, Source={StaticResource CategoryChangedViewModel}}"> 
       <ComboBox.ItemsPanel> 
        <ItemsPanelTemplate> 
         <VirtualizingStackPanel/> 
        </ItemsPanelTemplate> 
       </ComboBox.ItemsPanel> 
      </ComboBox> 

     </Grid> 
     <Grid x:Name="grid2" DataContext="{StaticResource estimateInformationTableViewSource1}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="311"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition Width="Auto"/> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"/> 
      </Grid.RowDefinitions> 
      <Label Content="DESCRIPTION:" Grid.Column="0" HorizontalAlignment="Left" Margin="3" Grid.Row="0" VerticalAlignment="Center"/> 
      <ComboBox x:Name="dESCRIPTIONComboBox" Grid.Column="1" DisplayMemberPath="DESCRIPTION" HorizontalAlignment="Left" Height="Auto" ItemsSource="{Binding}" Margin="3,9,-53,9" Grid.Row="0" VerticalAlignment="Center" Width="180"> 
       <ComboBox.ItemsPanel> 
        <ItemsPanelTemplate> 
         <VirtualizingStackPanel/> 
        </ItemsPanelTemplate> 
       </ComboBox.ItemsPanel> 
      </ComboBox> 
     </Grid> 
    </StackPanel> 


</Page> 

は、私は、これが機能することを発見しましたが、それが最良の答えであれば、私は好奇心

namespace gobo.Pages 
{ 
    /// <summary> 
    /// Interaction logic for TESTSTUFF01.xaml 
    /// </summary> 
    public partial class TESTSTUFF01 : Page 
    { 
     private gobo.gobo2018DataSet1 gobo2018DataSet1; 
     public gobo.gobo2018DataSet1TableAdapters.EstimateInformationTableTableAdapter gobo2018DataSet1TableAdapter; 
     private CollectionViewSource estimateInformationTableViewSource; 

     private gobo.gobo2018EstimateInformationTableDescriptionDataSet gobo2018EstimateInformationTableDescriptionDataSet; 
     private gobo.gobo2018EstimateInformationTableDescriptionDataSetTableAdapters.EstimateInformationTableTableAdapter EstimateInformationTableTableAdapter; 
     private CollectionViewSource estimateInformationTableViewSource1; 


     public TESTSTUFF01() 
     { 
      InitializeComponent(); 
     } 

     private void Page_Loaded(object sender, RoutedEventArgs e) 
     { 

      gobo2018DataSet1 = ((gobo.gobo2018DataSet1)(this.FindResource("gobo2018DataSet1"))); 
      gobo2018DataSet1TableAdapter = new gobo.gobo2018DataSet1TableAdapters.EstimateInformationTableTableAdapter(); 
      gobo2018DataSet1TableAdapter.Fill(gobo2018DataSet1.EstimateInformationTable); 
      estimateInformationTableViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("estimateInformationTableViewSource"))); 
      estimateInformationTableViewSource.View.MoveCurrentToFirst(); 

      gobo2018EstimateInformationTableDescriptionDataSet = ((gobo.gobo2018EstimateInformationTableDescriptionDataSet)(this.FindResource("gobo2018EstimateInformationTableDescriptionDataSet"))); 
      EstimateInformationTableTableAdapter = new gobo.gobo2018EstimateInformationTableDescriptionDataSetTableAdapters.EstimateInformationTableTableAdapter(); 
      EstimateInformationTableTableAdapter.FillByCategory(gobo2018EstimateInformationTableDescriptionDataSet.EstimateInformationTable,"ACC"); 
      estimateInformationTableViewSource1 = ((System.Windows.Data.CollectionViewSource)(this.FindResource("estimateInformationTableViewSource1"))); 
      estimateInformationTableViewSource1.View.MoveCurrentToFirst(); 


     } 

     public void LoadDescriptionToCbo(String parameter) 
     { 
      if(gobo2018EstimateInformationTableDescriptionDataSet != null) 
      { 
       EstimateInformationTableTableAdapter.FillByCategory(gobo2018EstimateInformationTableDescriptionDataSet.EstimateInformationTable, parameter); 
      } 

     } 

     private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      LoadDescriptionToCbo("ACT"); 
      Console.WriteLine("Button Click -> LoadDescriptionToCode"); 
     } 
    } 
} 
+0

私はこれが機能することを発見しましたが、それが最良の答えであるかどうか不思議です。 – mjordan

答えて

0

をCurrentCodeBehind。

private void cATEGORYComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      ComboBox cbx = (ComboBox)sender; 
      string s = ((DataRowView)cbx.Items.GetItemAt(cbx.SelectedIndex)).Row.ItemArray[0].ToString();  
      LoadDescriptionToCbo(s); 

     } 
関連する問題