によって繰り返されている中にComboBox
存在するesから値を取得する必要があります。そして、私はそれらを別のデータ構造に格納する必要があります、少なくとも私はそう思います。かなり簡単に聞こえますか?私はそれがそうであることを願っています、私はそれで一日中立ち往生しています。ObservableCollection
ItemsControl
これが私の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
を含むものであることを知ってください。Variable
Values
ここに問題があります。を取得する必要がありますSelectedIndex
(ComboBox
したがって、現在のコードを変更しますSelectedIndex="0"
)。そして、もし私ExternalClass
がそれらの値を含む必要があるのなら、私はSelectedIndex
すでにそのフィールド(Variable
とValue
)にアクセスできるので、それは簡単でしょう。しかし、私はそれらのint
値が必要です
public class MainViewModel : ViewModelBase
{
public ObservableCollection<int> SelectedIndices { get; set; }
...
}
またはそのようなもの。SelectedIndices
との両方を含むクイックラッパークラスを作成しましたが、2つのクラスではなく、が必要なIVCollection
ため、明らかに機能しません。ItemsControl
ObservableCollection
ObservableCollection
そして、ここでの質問の本当の本質は(私は間違っている可能性があります、それが私が尋ねている理由です)、私が現在いるStyle
/の範囲外にあるプロパティにアクセスするにはどうすればよいですか(例)?コードビハインドで問題なく実行できます。DataTemplate
IVCell
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などでイベントコマンドを使用してみましたが、それは問題を延期するだけです。私はそれを解決する必要があります。またはそれを回避します。