私はWPFが初めてで、MVVMの概念を学び始めています。
DB からのデータを保持するグラフィック オブジェクトを作成するアプリケーションに取り組んでいます。
複数のラベルとコンボボックスを含むグループ ボックスがあります。
それぞれが私のDBから来るリストを保持する必要があります。
最初のコンボボックスでは、その特定のリストに MVVVM を使用してそれを埋めることができました。
しかし、最初のリストで DataContext を既に開始している場合、他のコンボボックスを埋めるにはどうすればよいでしょうか?
ComboBox ごとに ModelView を作成する必要がありますか?
そして一般的に、いくつかのコンボボックスをリストに動的にバインドするにはどうすればよいですか?
<Label Grid.Row="0"
Grid.Column="0"
Grid.ColumnSpan="2"
Name="lblTiNam">Test Item Name :</Label>
<TextBox Grid.Row="0"
Grid.Column="2"
Name="tbTiName"
MinWidth="100"
MaxWidth="100"></TextBox>
<Label Grid.Row="1"
Grid.Column="0"
Grid.ColumnSpan="2"
Name="lblTiExStat">Execution Status :</Label>
<ComboBox Grid.Row="1"
Grid.Column="2"
x:Name="cbTiExStat"
MinWidth="100"
MaxWidth="100"
SelectedValuePath="Content"
ItemsSource="{Binding Binding QcLists.FieldList}"
DisplayMemberPath="Name">
</ComboBox>
<Label Grid.Row="2"
Grid.Column="0"
Grid.ColumnSpan="2"
Name="lblTiVersion">Version :</Label>
<ComboBox Grid.Row="2"
Grid.Column="2"
Name="cbTiVersion"
MinWidth="100"
MaxWidth="100"
SelectedValuePath="Content"
SelectedIndex="1">
<ComboBoxItem>To BE Bind From QC</ComboBoxItem>
</ComboBox>
<Label Grid.Row="3"
Grid.Column="0"
Grid.ColumnSpan="2"
Name="lblTiCRID">CRID :</Label>
<ComboBox Grid.Row="3"
Grid.Column="2"
Name="cbTiCRID"
MinWidth="100"
MaxWidth="100"
SelectedValuePath="Content">
<ComboBoxItem>To BE Bind From QC</ComboBoxItem>
</ComboBox>
<Label Grid.Row="4"
Grid.Column="0"
Grid.ColumnSpan="2"
Name="lblTiApplication">Application :</Label>
<ComboBox Grid.Row="4"
Grid.Column="2"
Name="cbTiApplication"
MinWidth="100"
MaxWidth="100"
SelectedValuePath="Content">
<ComboBoxItem>To BE Bind From QC</ComboBoxItem>
</ComboBox>
<Label Grid.Row="5"
Grid.Column="0"
Grid.ColumnSpan="2"
Name="lblTiTestLevel">Test Level :</Label>
<ComboBox Grid.Row="5"
Grid.Column="2"
Name="cbTiTestLevel"
MinWidth="100"
MaxWidth="100"
SelectedValuePath="Content">
<ComboBoxItem>To BE Bind From QC</ComboBoxItem>
</ComboBox>
詳細情報を追加するために私の質問を編集しています:
内部クラス TestableItemViewModel { public QCLists QcLists { get { return _qcLists; } }
#endregion
#region Constructor
public TestableItemViewModel()
{
_qcconnect = QCConnection.QCConnect.getInstance();
// LoadListSettings();
LoadListSettings( "TS_USER_05");
SaveCommand = new TestableItemSaveDetailsCommand(this);
}
#endregion
private void LoadListSettings(String FieldName)
{
Customization cust = QCConnection.QCConnect.getInstance().GetTD.Customization;
CustomizationFields fields = cust.Fields;
CustomizationListNode node;
CustomizationField field;
field = fields.get_Field("TEST", FieldName);
node = field.List.RootNode;
_qcLists = new QCLists(node.Children, node.Name);
}
}
class QCLists:INotifyPropertyChanged
{
TDAPIOLELib.List _fieldList;
List<String> myTestList;
String listName;
public String ListName
{
get { return listName; }
set { listName = value; }
}
public List<String> MyTestList
{
get { return myTestList; }
set { myTestList = value; }
}
public QCLists(TDAPIOLELib.List List,String name)
{
_fieldList = List;
myTestList = new List<String>();
listName = name;
}
public TDAPIOLELib.List FieldList
{
get
{
return _fieldList;
}
set
{
_fieldList = value;
OnPropertyChanged("FieldList");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
上記の xaml の背後にあるコードの場合:
DataContext = new TestableItemViewModel();
それらは私が使用した私のクラスです。私のxamlでわかるように、最初のcombocoxはrequierdリストにバインドされており、期待どおりの値を見ることができます。他のコンボボックスをバインドし続けるにはどうすればよいですか? 最初のリストに既にバインドされている TestableItemViewModel のインスタンスが 1 つしかなく、データ コンテキストがそのリストを使用しているためです。他のコントロールにバインドする必要がある他のリスト(実際には4つ)があります。もちろん、必要なリストを取得するためにクエリを使用していますが、リスト名はいつでも変更できるため、これは別の問題です。今のところ、5 バインディングの問題を解決するだけです。