によって繰り返されている中にComboBox存在するesから値を取得する必要があります。そして、私はそれらを別のデータ構造に格納する必要があります、少なくとも私はそう思います。かなり簡単に聞こえますか?私はそれがそうであることを願っています、私はそれで一日中立ち往生しています。ObservableCollectionItemsControl
これが私のXAMLです。
<Window.Resources>
<Style x:Key="IVCell" TargetType="{x:Type ItemsControl}">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Variable.Name}"/>
<ComboBox x:Name="IVValues" ItemsSource="{Binding Values}"
SelectedIndex="0"/>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
...
<ItemsControl Name="IndependentVariables" Style="{StaticResource IVCell}" ItemsSource="{Binding IVCollection}"/>
ここIVCollectionで、私のViewModelで定義されています:
public class MainViewModel : ViewModelBase
{
public ObservableCollection<ExternalClass> IVCollection { get; set; }
...
}
何であるかを尋ねる前に、それがとExternalClassを含むものであることを知ってください。VariableValues
ここに問題があります。を取得する必要がありますSelectedIndex(ComboBoxしたがって、現在のコードを変更しますSelectedIndex="0")。そして、もし私ExternalClassがそれらの値を含む必要があるのなら、私はSelectedIndexすでにそのフィールド(VariableとValue)にアクセスできるので、それは簡単でしょう。しかし、私はそれらのint値が必要です
public class MainViewModel : ViewModelBase
{
public ObservableCollection<int> SelectedIndices { get; set; }
...
}
またはそのようなもの。SelectedIndicesとの両方を含むクイックラッパークラスを作成しましたが、2つのクラスではなく、が必要なIVCollectionため、明らかに機能しません。ItemsControlObservableCollectionObservableCollection
そして、ここでの質問の本当の本質は(私は間違っている可能性があります、それが私が尋ねている理由です)、私が現在いるStyle/の範囲外にあるプロパティにアクセスするにはどうすればよいですか(例)?コードビハインドで問題なく実行できます。DataTemplateIVCell
private void IVValues_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
for (var i = 0; i < IndependentVariables.Items.Count; i++)
{
var uiElement = IndependentVariables.ItemContainerGenerator.ContainerFromIndex(i);
var cBox = FindVisualChild<ComboBox>(uiElement); //Homebrew method
//cBox.SelectedIndex
}
}
しかし、もう一度、私はMVVMフレンドリーを維持しようとしています。MVVM Lightなどでイベントコマンドを使用してみましたが、それは問題を延期するだけです。私はそれを解決する必要があります。またはそれを回避します。