1

Togglebutton を 16 回動的に生成する必要がある WPF に取り組んでいます。このトグルボタンを 16 回書き留めて、個別のボタン クリック コマンドを用意すると効率が悪くなります。

XAML:

<Togglebutton Height="14" Command="{Binding TogglebuttonGen}" Margin="0" Name="checkBox1" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Center" />

理想的には、それらを 16 回生成し、次のようにビューモデル クラスに共通のメソッドを 1 つ持たせたいと考えています。

private ICommand mTogglebuttonGen;
    public ICommand TogglebuttonGen
    {
        get
        {
            if (mTogglebuttonGen == null)
                mTogglebuttonGen = new DelegateCommand(new Action(mTogglebuttonGenExecuted), new Func<bool>(mTogglebuttonGenCanExecute));

            return mTogglebuttonGen;
        }
        set
        {
            mTogglebuttonGen = value;
        }
    }

    public bool mTogglebuttonGenCanExecute()
    {
        return true;
    }

    public void mTogglebuttonGenExecuted(some INDEX parameter which gives me selected Togglebutton)
    {
        // Have a common method here which performs operation on each Togglebutton click based on INDEX which determines which Togglebutton I have selected
    }

次のようにC++アプリでそれを行いました:

for(int j = 0; j < 16; j ++)
    {
        m_buttonActiveChannels[j] = new ToggleButton();
        addAndMakeVisible(m_buttonActiveChannels[j]);
        m_buttonActiveChannels[j]->addButtonListener(this);
    }

//Checking which Togglebutton is clicked
unsigned bit = 0x8000;
for(int i = 15; i >= 0; i--)
{
    if(0 != (value & bit)) //Value has some hardcoded data
    {
        m_buttonActiveChannels[i]->setToggleState(true);
    } 
    else
    {
        m_buttonActiveChannels[i]->setToggleState(false);
    }

    bit >>= 1;
}

したがって、これは16回生成され、に基づいて操作を実行する1つのメソッドがありますindex i

どうすれば私のwpfアプリでそれを達成できますか? :)

4

1 に答える 1

2

ビューモデルで、ToggleAction クラスの 16 個のインスタンスを含むコレクションを作成します。

public ObservableCollection<MyToggleActionClass> MyItems {get;set;}


public class MyToggleActionClass
{
   public string DisplayName {get;set;}
   public int Index {get;set;}
}

このコレクションを ItemsControl の ItemsSource にバインドします。それだけです。

<ItemsControl ItemsSource="{Binding MyItems}">
 <ItemsControl.ItemTemplate>
  <DataTemplate>
    <ToggleButton Content="{Binding Displayname}"
                  Command="{Binding DataContext.TogglebuttonGen, RelativSource={RelativSource AncestorType=ItemsControl}}"
                  CommandParameter="{Binding Index}"/>
  </DataTemplate>
 </ItemsControl.ItemTemplate>
</ItemsControl>

全て手書きですので、間違いがないかご確認ください。最も重要なのは、コマンド バインディングです。ViewModel からコマンドを呼び出す場合は、RelativeSource を使用して ViewModel DataContext まで移動する必要があります。

また、MyToggleActionClass でトグル状態を処理/バインドします。

于 2012-10-24T11:28:51.373 に答える