1

変なタイトルですみません。Ui コンポーネントの動的生成を扱っています。ボタンを動的に生成する Xaml クラスに ListBox があります。

意見:

<ListBox x:Name="SetButtonList" ItemsSource="{Binding}" >
         <ListBox.ItemTemplate>
               <DataTemplate >
                     <Grid>                                   
                         <Button Content="{Binding Path=SetButtonFreq}" Command="{Binding Path=SetFreqCommand}" />                                    
                     </Grid>
               </DataTemplate>
         </ListBox.ItemTemplate>
</ListBox>

ビューモデル:

private ICommand mSetFreqCommand;
public ICommand SetFreqCommand
    {
        get
        {
            if (mSetFreqCommand == null)
                mSetFreqCommand = new DelegateCommand(new Action(SetFreqCommandExecuted), new Func<bool>(SetFreqCommandCanExecute));

            return mSetFreqCommand;
        }
        set;            
    }

    public bool SetFreqCommandCanExecute()
    {
        return true;
    }

    public void SetFreqCommandExecuted()
    {
        // Executes the Body when Button is Clicked
    }

モデル:

private string _SetFreqValue = "";
public String SetButtonFreq
    {
        set; get;            
    }

    public ClockModel(string SetButtonFreq)
    {
        this.SetButtonFreq = SetButtonFreq;
    }        

    public override string ToString()
    {
        return _SetFreqValue;
    }

View.cs ファイル:

// mClock is object of Model Class
mClock.Add(new ClockModel("Set 12.0 MHz"));
mClock.Add(new ClockModel("Set 12.288 MHz"));
mClock.Add(new ClockModel("Set 15.36 MHz"));
mClock.Add(new ClockModel("Set 19.2 MHz"));            

これにより、リストボックスに異なる頻度の 4 つのボタンが表示されます。しかし、それらをクリックしようとすると、コントロールはSetFreqCommandExecuted()メソッドに入りません。私はどこで間違いを犯していますか?:(

助けてください

4

1 に答える 1

2

ボタンは、現在のページの一般的なViewModelではなく、バインドされたアイテム内でSetFreqCommandを見つけようとします。次のバインディングで修正できます。

Command="{Binding ElementName=SetButtonList, Path=DataContext.SetFreqCommand}"
于 2012-10-09T11:00:38.843 に答える