在这里,我有 Outer ObservableCollection
of model MobileModel
。MobileModel 有一个inner Collection
of 模型MobileModelInfo
我需要将属性OS
作为内部集合内的命令参数传递。
C#源代码是
public class MobileModel : Notify
{
private string _brand = string.Empty;
private ObservableCollection<MobileModelInfo> _model = new ObservableCollection<MobileModelInfo>();
private string _os = string.Empty;
public string Brand
{
get { return _brand; }
set { _brand = value; OnPropertyChanged(); }
}
public ObservableCollection<MobileModelInfo> Model
{
get { return _model; }
set { _model = value; OnPropertyChanged(); }
}
public string OS
{
get { return _os; }
set { _os = value; OnPropertyChanged(); }
}
}
public class MobileModelInfo
{
public string Name { get; set; }
public bool IsMobileSelected { get; set; }
}
public void GetMobile()
{
List<MobileModel> mList = new List<MobileModel>();
List<MobileModelInfo> modList = new List<MobileModelInfo>();
MobileModel mob = new MobileModel();
modList.Clear();
mob.Brand = "Apple";
modList.Add(new MobileModelInfo { Name = "iPhone 4" });
modList.Add(new MobileModelInfo { Name = "iPhone 5" });
modList.Add(new MobileModelInfo { Name = "iPhone 6" });
mob.Model = new ObservableCollection<MobileModelInfo>(modList);
mob.OS = "IOS";
mList.Add(mob);
mob = new MobileModel();
modList.Clear();
mob.Brand = "Samsung";
modList.Add(new MobileModelInfo { Name = "S4" });
modList.Add(new MobileModelInfo { Name = "S5" });
modList.Add(new MobileModelInfo { Name = "S6" });
mob.Model = new ObservableCollection<MobileModelInfo>(modList);
mob.OS = "Android";
mList.Add(mob);
mob = new MobileModel();
modList.Clear();
mob.Brand = "MicroSoft";
modList.Add(new MobileModelInfo { Name = "Lumina 9900" });
modList.Add(new MobileModelInfo { Name = "Opera X220" });
mob.Model = new ObservableCollection<MobileModelInfo>(modList);
mob.OS = "Windows";
mList.Add(mob);
mob = new MobileModel();
modList.Clear();
mob.Brand = "Sony Ericssion";
modList.Add(new MobileModelInfo { Name = "S4" });
modList.Add(new MobileModelInfo { Name = "S5" });
modList.Add(new MobileModelInfo { Name = "S6" });
mob.Model = new ObservableCollection<MobileModelInfo>(modList);
mob.OS = "Android";
mList.Add(mob);
MobileList = new ObservableCollection<MobileModel>(mList);
}
XAML 源代码
<ListBox Name="MobieDetail" ItemsSource="{Binding MobileList}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Name="Brand" Width="200"/>
<ColumnDefinition Name="Mobile" Width="90"/>
<ColumnDefinition Name="OS" Width="120"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Brand}" MaxWidth="195" TextWrapping="Wrap" Grid.Column="0"/>
<ComboBox Name="MobileName" ItemsSource="{Binding Model,UpdateSourceTrigger=PropertyChanged}" Grid.Column="1" Width="220" HorizontalAlignment="Left" VerticalAlignment="Center">
<ComboBox.ItemTemplate>
<DataTemplate>
<CheckBox x:Name="ChkSelect" Content="{Binding Name}" IsChecked="{Binding IsMobileSelected}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<commandHelper:EventToCommand Command="{Binding ElementName=MobieDetail, Path=MobieDetailCommand}">
<commandHelper:EventToCommand.CommandParameter>
<MultiBinding>
<Binding Path="DataContext"></Binding>
<Binding ></Binding>
</MultiBinding>
</commandHelper:EventToCommand.CommandParameter>
</commandHelper:EventToCommand>
</i:EventTrigger>
</i:Interaction.Triggers>
</CheckBox>
</DataTemplate>
</ComboBox.ItemTemplate>
<TextBlock Text="{Binding OS}" MaxWidth="195" TextWrapping="Wrap" Grid.Column="2"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
如何在OS
内部传递财产<Binding Path="DataContext"></Binding>