0

ラジオボタン、テキストボックス、コンボボックスを含む2つのグループボックスを動的に生成する必要があるWPFアプリケーションに取り組んでいます。さて、両方のグループボックスで値が異なる必要があるというトリッキーな状況に遭遇しました。

2 つの xaml ファイルPCM2PDMView.xamlPCM2PDMWidgetView.xamlビューモデル クラスがあります。

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 });            
    }

これにより、内部に UI コントロールが関連付けられた 2 つのグループボックスが生成されます。

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;}

要件:

  1. Grid.Row=1というタイトルのラジオボタンがあることに気がついたらPort B、私の要件はPort B、1 番目のグループボックスとPort C2 番目のグループボックスにあることです。機能(buttonclick メソッド)は両方に共通ですが、名前は異なる必要があります。どうすればそれを達成できますか?

  2. コンボボックスに 3 つのアイテムを追加しています。ここでは、1 番目のグループ ボックスに存在するコンボ ボックスに and を追加Normalし、2番目のグループ ボックスに存在するコンボ ボックスに追加します。それはどのように達成できますか?:)Mode 1 - PCM + PDMNormalMode 1 - PCM + PDMMode 2 - PDM Only

  3. 気がつけGrid.Row=3ばトグルボタンがありますPCM2PDMEnable。このトグルボタンを最初のグループボックスではなく、2 番目のグループボックスに表示したいと考えています。どうやってやるの?

  4. Textbox in にGrid.Row=4は、値が (例: 0x5) のテキスト ボックスがあります。このテキスト ボックスのテキストを、Groupbox 1 では 0x5、Groupbox2 の Textbox では 0x7 に設定する必要があります。どうやってするか?

助けてください :)

4

1 に答える 1

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=" {BindingRadioButtonName}""に変更します

<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>

コンストラクターに次の要素を追加する代わりに、パラメーターとしてリストとしてコンストラクターに送信します。

あなたのコード

_PortModeList.Add( "Normal"); //コンストラクターに追加_PortModeList.Add( "Mode 1-PCM + PDM"); _PortModeList.Add( "モード2-PDMのみ");

2のソリューション

public PCM2PDMWidgetViewModel(List comboBoxItems){foreach(item in comboBoxItems){_PortModeList.Add(item); }}

「PCM2PDMWidgetViewModel」インスタンスの作成中に、リストをコンストラクターパラメーターとして送信します(次のコードを参照してください)。

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の場合

これは、ラジオンボタン名と同じ方法で修正できます。

DescriptionとIDの場合と同じ方法で、「MemAddPoint」プロパティの値を設定します。このプロパティはすでにテキストボックスにバインドされているため、xamlバインディングを変更する必要はありません。

3の場合:

「Visibility」タイプの「PCM2PDMWidgetViewModel」に新しいプロパティを作成し、それをトグルボタンの可視性プロパティにバインドする必要があります。インスタンスの作成中にプロパティ値を設定します

于 2012-10-23T11:15:23.923 に答える