我正在开发一个WPF应用程序,我需要动态生成2个组合框,里面有单选按钮,文本框和组合框。好吧,我遇到了一个棘手的情况,两个组合中的值需要不同。
我有两个xaml文件PCM2PDMView.xaml
和PCM2PDMWidgetView.xaml
& viewmodel类。
PCM2PDMView.xaml:
<UserControl.Resources>
<DataTemplate x:Key="PCM2PDMDataTemplate">
<WrapPanel>
<TextBlock Text="{Binding Description}" Margin="5,5,0,0"/>
<local:PCM2PDMWidgetView Margin="5,10,5,5"/>
</WrapPanel>
</DataTemplate>
</UserControl.Resources>
<Grid Style="{DynamicResource styleBackground}" >
<ItemsControl ItemTemplate="{StaticResource PCM2PDMDataTemplate}" ItemsSource="{Binding PCM2PDMWidgets}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
PCM2PDMWidgetView.xaml:
<Grid>
<GroupBox Height="Auto" HorizontalAlignment="Stretch" Margin="5" Name="groupBox1" VerticalAlignment="Stretch" Width="Auto">
<Grid>
<Grid Grid.Row="1">
<RadioButton Grid.Column="1" Content="Port B" Command="{Binding PortCommand}" IsChecked="{Binding PortCheck}" Height="20" Width="60" HorizontalAlignment="Center" Margin="0,0,0,0" Name="PCM2PDMEnableRadioBtn" VerticalAlignment="Center" />
</Grid>
<Grid Grid.Row="2">
<ComboBox Grid.Column="1" Height="20" ItemsSource="{Binding PortModeList}" SelectedItem="{Binding SelectedPortModeList, Mode=OneWayToSource}" SelectedIndex="0" HorizontalAlignment="Center" Margin="0,0,0,0" Name="PortModeCombo" VerticalAlignment="Center" Width="110" />
</Grid>
<Grid Grid.Row="3">
<ToggleButton Grid.Column="0" Content="Soft Reset" Height="25" Width="105" HorizontalAlignment="Center" Margin="0,0,0,0" Name="SoftResetRadioBtn" VerticalAlignment="Center" />
<ToggleButton Grid.Column="1" Command="{Binding PCM2PDMEnableCommand}" IsChecked="{Binding PCM2PDMCheck}" Content="PCM2PDM Enable" Height="25" Width="110" HorizontalAlignment="Center" Margin="0,0,0,0" Name="PCM2PDMRadioBtn" VerticalAlignment="Center" />
</Grid>
<Grid Grid.Row="4">
<TextBox Height="25" IsReadOnly="True" Text="{Binding MemAddPoint}" Margin="0" Name="SetRead" />
</Grid>
</Grid>
</GroupBox>
</Grid>
PCM2PDmViewModel.cs:
public ObservableCollection<PCM2PDMWidgetViewModel> PCM2PDMWidgets { get; set; }
public PCM2PDMViewModel()
{
PCM2PDMWidgets = new ObservableCollection<PCM2PDMWidgetViewModel>();
PCM2PDMWidgets.Add(new PCM2PDMWidgetViewModel { Description = "PCM2PDM 0", ID = 0 });
PCM2PDMWidgets.Add(new PCM2PDMWidgetViewModel { Description = "PCM2PDM 1", ID = 1 });
}
这会在其中生成2个具有关联UI控件的组框。
PCM2PDMWidgetViewModel.cs:
public ObservableCollection<string> _PortModeList = _PortModeList = new ObservableCollection<string>();
_PortModeList.Add("Normal"); //Adding in Constructor
_PortModeList.Add("Mode 1 - PCM + PDM");
_PortModeList.Add("Mode 2 - PDM only");
public ObservableCollection<string> PortModeList
{
get { return _PortModeList; }
set
{
_PortModeList = value;
OnPropertyChanged("PortModeList");
}
}
private string _selectedPortModeList;
public string SelectedPortModeList
{
get { return _selectedPortModeList; }
set
{
_selectedPortModeList = value;
OnPropertyChanged("SelectedPortModeList");
}
}
public string Description {get; set;}
public int ID {get; set;}
public string MemAddPoint {get; set;}
要求:
现在,如果您发现Grid.Row=1
,您会发现标题为Port B
的单选按钮,我的要求是在我的第一个组框中Port B
和Port C
第二组。功能(buttonclick方法)对于两者都是通用的,但名称必须不同。我们怎样才能做到这一点?
在我的组合框中我添加了3项。在这里,我想在第一个组框中的组合框中添加Normal
和Mode 1 - PCM + PDM
,并在第二个组框中的组合框中添加Normal
,Mode 1 - PCM + PDM
和Mode 2 - PDM Only
。怎么能实现呢? :)
如果您发现Grid.Row=3
,您会发现PCM2PDMEnable
togglebutton。我希望在我的第二个组框中看到这个togglebutton,而不是在我的第一个组框中。我怎么能这样做?
Grid.Row=4
中的文本框有一个文本框,其值为(例如0x5)。我需要将此文本框的文本设置为Groupbox 1中的0x5和Groupbox2的Textbox中的0x7。怎么做?
请帮助:)
答案 0 :(得分:1)
在“PCM2PDMWidgetViewModel”中创建一个属性,说“RadioButtonName”,并在创建“PCM2PDMWidgetViewModel”实例时将属性设置为您想要的名称..类似这样的
PCM2PDMWidgets.Add(new PCM2PDMWidgetViewModel { Description = "PCM2PDM 0", ID = 0, RadioButtonName = "Port B" });
PCM2PDMWidgets.Add(new PCM2PDMWidgetViewModel { Description = "PCM2PDM 1", ID = 1, RadioButtonName = "Port C" });
在PCM2PDMWidgetView XAML中:
将单选按钮内容更改为绑定“Content =”{Binding RadioButtonName}“”
<Grid Grid.Row="1">
<RadioButton Grid.Column="1" Content="{Binding RadioButtonName}" Command="{Binding PortCommand}" IsChecked="{Binding PortCheck}" Height="20" Width="60" HorizontalAlignment="Center" Margin="0,0,0,0" Name="PCM2PDMEnableRadioBtn" VerticalAlignment="Center" />
</Grid>
而不是在构造函数中添加以下元素..将它们作为List作为参数发送给构造函数..
您的代码
_PortModeList.Add( “正常”); //在构造函数中添加 _PortModeList.Add(“模式1 - PCM + PDM”); _PortModeList.Add(“模式2 - 仅限PDM”);
解决方案2
public PCM2PDMWidgetViewModel(List comboBoxItems) { foreach(comboBoxItems中的项目) { _PortModeList.Add(项目); } }
创建“PCM2PDMWidgetViewModel”实例时,将List作为构造函数参数发送(请查看以下代码)
PCM2PDMWidgets.Add(new PCM2PDMWidgetViewModel (new List<string>{"Normal","Mode 1 - PCM + PDM"}) { Description = "PCM2PDM 0", ID = 0, RadioButtonName = "Port B" });
PCM2PDMWidgets.Add(new PCM2PDMWidgetViewModel(new List<string>{"Normal","Mode 1 - PCM + PDM","Mode 2"}) { Description = "PCM2PDM 1", ID = 1, RadioButtonName = "Port C" });
适用于4
你可以用与radion按钮名称相同的方式解决这个问题。
设置“MemAddPoint”属性的值,方法与描述和ID相同。由于此属性已绑定到文本框,因此您无需更改xaml绑定
适用于3:
您必须在“可见性”类型的“PCM2PDMWidgetViewModel”中创建一个新属性,并将其绑定到togglebutton可见性属性。在创建实例
时设置属性值