Database
からデータを取得する質問と回答を持つListBox
があります。今、私は表示または "リストボックス"から選択した行のデータを編集したいが、私は問題がどのようにこの行に到達する必要があります。リストボックスから選択したアイテムをデータテンプレートでバインドする
編集。私は何をしたいかを示すための画像: http://imgur.com/5NHjYA4
マイビュー:
<Window x:Class="QuizMaker.MainWindow"
<Window.DataContext>
<local:MainViewModel />
</Window.DataContext>
<Window.Resources>
<DataTemplate x:Key="QuestionsTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="320" />
<ColumnDefinition Width="120" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="20" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Path=Question}" FontWeight="Bold" />
<TextBlock Grid.Column="1" Text="{Binding Path=AnswerA}" />
<TextBlock Grid.Column="2" Text="{Binding Path=AnswerB}"/>
<TextBlock Grid.Column="3" Text="{Binding Path=AnswerC}"/>
<TextBlock Grid.Column="4" Text="{Binding Path=AnswerD}"/>
<TextBlock Grid.Column="5" Text="{Binding Path=RightAnswer}" FontWeight="Bold"/>
</Grid>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox DataContext="{Binding MyDataSet}"
x:Name="listBox"
ItemsSource="{Binding Path=QuestionTable}"
ItemTemplate="{StaticResource QuestionsTemplate}"
SelectedItem="{Binding SelectedItemString}"
/>
</Grid>
</Window>
とViewModelに私がコメントを追加することができませんでした申し訳ありません
{
class MainViewModel
{
private string _appPath;
private MainModel _MainModel;
public MainViewModel()
{
_MainModel = new MainModel();
mdbFile = Path.Combine(AppDataPath, "QuestionBase.mdb");
connString = $"Provider=Microsoft.Jet.OLEDB.4.0; Data Source={mdbFile}";
conn = new OleDbConnection(connString);
adapter = new OleDbDataAdapter("SELECT * FROM QuestionTable;", conn);
MyDataSet = new DataSet();
adapter.Fill(MyDataSet, "QuestionTable");
}
private void AddToDB()
{
conn.Open();
OleDbCommand myCommand = new OleDbCommand("Insert INTO QuestionTable (Question, AnswerA, AnswerB, AnswerC, AnswerD) Values(@Question, @AnswerA, @AnswerB, @AnswerC, @AnswerD)", conn);
myCommand.Parameters.Add("@Question", OleDbType.BSTR).Value = Question;
myCommand.Parameters.Add("@Question", OleDbType.BSTR).Value = AnswerA;
myCommand.Parameters.Add("@Question", OleDbType.BSTR).Value = AnswerB;
myCommand.Parameters.Add("@Question", OleDbType.BSTR).Value = AnswerC;
myCommand.Parameters.Add("@Question", OleDbType.BSTR).Value = AnswerD;
myCommand.ExecuteNonQuery();
conn.Close();
}
private string AppDataPath
{
get
{
if (string.IsNullOrEmpty(_appPath))
{
_appPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
}
return _appPath;
}
}
public OleDbDataAdapter adapter
{
get
{
return _MainModel.adapter;
}
set
{
_MainModel.adapter = value;
OnPropertyChanged("adapter");
}
}
public DataSet MyDataSet
{
get
{
return _MainModel.MyDataSet;
}
set
{
_MainModel.MyDataSet = value;
OnPropertyChanged("MyDataSet");
}
}
public string SelectedItemString
{
get
{
return _MainModel.SelectedItemString;
}
set
{
_MainModel.SelectedItemString = value;
OnPropertyChanged("SelectedItemString");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}
正確に何を求めていますか?どのようにデータベースからデータを取得する? –
これは話題にはなりませんが、 'AddToDB()'メソッドでは、 '@ Question'パラメータを5回、その他の4つのパラメータをまったく設定していないコピー/ペーストのバグがあるようです。 –
[ListBoxアイテムのWPF DataTemplateを選択した場合は、WPF DataTemplateを変更する]の可能な複製(0120-917-383)/変更 - WPF-DataTemplate-for-listbox-item-if-selected) –