我需要從我的ComboBox
es中獲取值,該值位於ObservableCollection
中,並被ItemsControl
重複執行。我需要將它們存儲在一個單獨的數據結構中,至少我認爲我是這樣做的。聽起來很直截了當?我希望是這樣,我一整天都被困住了。ItemsControl DataTemplate中的WPF MVVM訪問元素
這裏是我的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
在這裏被定義,在我的視圖模型:
public class MainViewModel : ViewModelBase
{
public ObservableCollection<ExternalClass> IVCollection { get; set; }
...
}
之前你問什麼ExternalClass
是,知道那是什麼包含Variable
和Values
。
這是問題所在。我需要得到ComboBox
的SelectedIndex
(所以我會改變當前的代碼SelectedIndex="0"
)。如果我的ExternalClass
是需要包含這些值的,那很容易,因爲我已經可以訪問其字段(Variable
和Value
)。但我需要那些int
值在
public class MainViewModel : ViewModelBase
{
public ObservableCollection<int> SelectedIndices { get; set; }
...
}
或類似的東西。我已經做了一個快速的包裝類,以包含SelectedIndices
和IVCollection
,但顯然這是行不通的,因爲ItemsControl
想要ObservableCollection
,而不是一個有兩個ObservableCollection
s的類。
而且我在這裏想這個問題的真正的肉(我可能是錯的,這就是爲什麼我問)是怎樣訪問這就是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等事件命令,但這只是推遲了這個問題。我需要解決它。或者規避它。
所以,如果你管理的每個組合框的選定索引值綁定到你將selectedIndices集合,你將如何跟蹤它的值從組合框/ ExternalClass來到?這聽起來可能是IVCollection中的項目的長度是固定的,因此你的意圖是使用SelectedIndices中的值的索引,但我不完全清楚。 – 2013-02-08 21:37:31
在'ExternalClass'中需要另外一個或兩個屬性來綁定ComboBox的SelctedItem和/或SelectedIndex以跟蹤哪些項目被選中。 – 2013-02-08 21:54:29