お世話になります。
WPF、C#での開発を勉強中のものです。データベースにPostgreSQLを使用してのアプリを進めていまして2つのコンボボックスのうち1つの目のコンボボックスの選択された値をもとに2つ目のコンボボックスの値リストを作成するものですがうまくいきません。
1つ目のコンボボックスの値が選択されたということを知るためにBlendのSelectionChangedを使用しました。以下にコードを示します。XAMLです。
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:AIT_Shipment2.Views" xmlns:vm="clr-namespace:AIT_Shipment2.ViewModels" xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" xmlns:System="clr-namespace:System;assembly=mscorlib" xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" x:Class="AIT_Shipment2.Views.ShukkaJyokyo" mc:Ignorable="d" d:DesignHeight="640" d:DesignWidth="1050"> <UserControl.Resources> <vm:ShukkaJyokyoVM x:Key="ViewDataDataSource" d:IsDataSource="True"/> </UserControl.Resources> <UserControl.DataContext> <vm:ShukkaJyokyoVM /> </UserControl.DataContext> <Grid Background="White"> <StackPanel HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"> <StackPanel Height="24" Orientation="Horizontal" HorizontalAlignment="Left" Margin="0,10"> <Label x:Name="label" Content="納入日:" Margin="20,0,0,0"/> <xctk:DateTimePicker x:Name="dtpSdate" Width="110" ShowButtonSpinner="False" TimePickerVisibility="Hidden" Format="LongDate" Value="{Binding Path=StartDate}" AutoCloseCalendar="True" AllowTextInput="False"/> <Label x:Name="label1" Content="~"/> <xctk:DateTimePicker x:Name="dtpEdate" Width="110" ShowButtonSpinner="False" TimePickerVisibility="Hidden" Format="LongDate" Value="{Binding Path=EndDate}" AllowTextInput="False" AutoCloseCalendar="True"/> <Label x:Name="label2" Content="納入先:" Margin="20,0,0,0"/> <ComboBox x:Name="cmbNsaki" Width="220" ItemsSource="{Binding trhksks}" SelectedValuePath="tkCD" SelectedItem="{Binding SelectedtkCD}"> <ComboBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding tkCD}" Margin="2.5"/> <TextBlock Text="{Binding tkNM}" Margin="2.5"/> </StackPanel> </DataTemplate> </ComboBox.ItemTemplate> <i:Interaction.Triggers> <i:EventTrigger EventName="SelectionChanged"> <ei:CallMethodAction TargetObject="{Binding}" MethodName="Execute"/> </i:EventTrigger> </i:Interaction.Triggers> </ComboBox> <Label x:Name="label3" Content="便:" Margin="20,0,0,0"/> <ComboBox x:Name="cmbBin" Width="50" ItemsSource="{Binding binLists}" DisplayMemberPath="BinNo" SelectedValuePath="BinNo"> </ComboBox> <Button x:Name="button" Content="表示" Margin="50,0,0,0" Width="100" Height="24"/> </StackPanel> <StackPanel Height="410"> <DataGrid x:Name="dataGrid" Height="400"/> </StackPanel> <StackPanel Height="40" Orientation="Horizontal" HorizontalAlignment="Right"> <!--<TextBox x:Name="textBox" Height="23" TextWrapping="Wrap" Text="{Binding SelectedValue, ElementName=cmbNsaki}" Width="120"/>--> <Button x:Name="button1" Content="Button" Width="100" Margin="0"/> <Button x:Name="button2" Content="Button" Width="100" Margin="100,0,0,0"/> <Button x:Name="button3" Content="Button" Width="100" Margin="30,0,20,0"/> </StackPanel> </StackPanel> </Grid> </UserControl>
次にViewMODELに該当するコードです。
using
1using System.Collections.Generic; 2using System.Collections.ObjectModel; 3using System.ComponentModel; 4using System.Linq; 5using System.Runtime.InteropServices.ComTypes; 6using System.Text; 7using System.Threading.Tasks; 8using System.Windows.Data; 9 10namespace AIT_Shipment2.ViewModels 11{ 12 public class ShukkaJyokyoVM : ViewModelBase 13 { 14 private DateTime _StartDate = DateTime.Now; 15 public DateTime StartDate 16 { 17 get { return _StartDate; } 18 set 19 { 20 if (_StartDate != value) 21 { 22 _StartDate = value; OnPropertyChanged("StartDate"); 23 } 24 } 25 } 26 27 private DateTime _EndDate = DateTime.Now; 28 public DateTime EndDate 29 { 30 get { return _EndDate; } 31 set 32 { 33 if (_EndDate != value) 34 { 35 _EndDate = value; OnPropertyChanged("EndDate"); 36 } 37 } 38 } 39 40 // 得意先マスタよりコードと名称をコレクションに設定 41 //IList<Trhksk> trhksks = new ObservableCollection<Trhksk>(); 42 public IList<Trhksk> trhksks 43 { 44 get 45 { 46 using (var db = new Models.PgSQLConnection(clsConst.dBID, clsConst.dBPW, clsConst.dBSC)) 47 { 48 var b = from t in db.bomm_torihikisakis 49 where t.enable == 0 50 select new Trhksk 51 { 52 tkCD = t.torihikicd, 53 tkNM = t.torihikinm 54 }; 55 return b.ToList(); 56 } 57 } 58 } 59 // 取引先の選択を受け取る 60 public Trhksk SelectedtkCD { get; set; } 61 62 //便リスト作成 63 //public IList<binList> binLists { get; set; } 64 public ObservableCollection<binList> binLists { get; set; } 65 66 67 public void Execute() 68 { 69 if (SelectedtkCD == null) 70 { 71 return; 72 } 73 using (var db = new Models.PgSQLConnection(clsConst.dBID, clsConst.dBPW, clsConst.dBSC)) 74 { 75 var b = from t in db.koum_shukkabins 76 where t.nonyusaki == SelectedtkCD.tkCD 77 orderby t.bin 78 select new binList 79 { 80 BinNo = t.bin.ToString() 81 }; 82 //binLists = b.ToList(); 83 ObservableCollection<binList> binLists = new ObservableCollection<binList>(b.ToList()); 84 } 85 } 86 //// 便リスト作成 87 //public IList<binList> binLists 88 //{ 89 // get 90 // { 91 // using (var db = new Models.PgSQLConnection(clsConst.dBID, clsConst.dBPW, clsConst.dBSC)) 92 // { 93 // var b = from t in db.koum_shukkabins 94 // where t.nonyusaki == "3230-1" 95 // orderby t.bin 96 // select new binList 97 // { 98 // BinNo = t.bin.ToString() 99 // }; 100 // return b.ToList(); 101 // } 102 // } 103 //} 104 } 105 106 // 出荷状況画面得意先選択設定 107 public class Trhksk 108 { 109 public string tkCD { get; set; } 110 public string tkNM { get; set; } 111 } 112 113 public class binList 114 { 115 public string BinNo { get; set; } 116 } 117 118コード
以下のコードで最初からバインディングするのであればリストが作成されることは確認いたしました。
// 便リスト作成
public IList<binList> binLists
{
get
{
using (var db = new Models.PgSQLConnection(clsConst.dBID, clsConst.dBPW, clsConst.dBSC))
{
var b = from t in db.koum_shukkabins
where t.nonyusaki == "3230-1"
orderby t.bin
select new binList
{
BinNo = t.bin.ToString()
};
return b.ToList();
}
}
}
デバッグでは『Execute()』は実行され、『where t.nonyusaki == SelectedtkCD.tkCD』にも選択された値が設定されることは確認できました。
プロパティーの受け渡しなど理解度不足とは思いますがなどアドバイスいただけましたら助かります。
また、作法等で『動くけどこれはちょっとおかしい。』などもありましたらご指摘お願いできればと思います。
以上、よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/14 23:34