0

私はWPFC#の世界に不慣れです。コンストラクターに、子をスタックパネルに追加するメソッドがあります。2つのxamlファイルがあります。メインにはスタックパネルがあり、もう一方にはラベルがあります。

メインウィンドウビュー:

<Grid Grid.Row="1" Name="VoltageChannels" >
        <StackPanel Height="Auto" Name="stackPanel" Width="Auto" MinHeight="300"> </StackPanel>
    </Grid>

<Button Content="Refresh All" Command="{Binding AddChildCommand}"  Name="RefreshAllBtn" />


public void OnChildAdd()
    {
        foreach (VoltageBoardChannel mVoltageChannelViewModel in mVoltageViewModel.VoltageChannelList)
        {
            VoltageChannelView mVoltageChannelView = new VoltageChannelView();
            mVoltageChannelView.Margin = new Thickness(2);
            mVoltageChannelView.ChannelInfo = mVoltageChannelViewModel;
            stackPanel.Children.Add(mVoltageChannelView);
        }
    }

ビューモデルクラスからこのメソッドにアクセスして、ボタンクリックで子を追加したいと思います。基本的に私はアイテムのセットを持っているリストを持っています。これらのアイテムはボタンクリックで表示されます:)これがViewおよびViewModelクラスです:

ViewModel:

public viewModel()
{

}
public List<VoltageBoardChannel> VoltageChannelList
    {
        get 
        { 
            return channelList; 
        }

        set
        { 
            channelList = value;
            OnPropertyChanged("ChannelList");
        }
    }

List<VoltageBoardChannel> channelList = new List<VoltageBoardChannel>(0);

    // VoltageBoardChannel has Channel name and avalable as property.
    List<VoltageBoardChannel> redhookChannels = new List<VoltageBoardChannel>
    {
         new VoltageBoardChannel { ChannelName = "", IsAvailable = false},
         new VoltageBoardChannel { ChannelName = "VDD_IO_AUD", IsAvailable = true},
         new VoltageBoardChannel { ChannelName = "VDD_CODEC_AUD", IsAvailable = true},
         new VoltageBoardChannel { ChannelName = "VDD_DAL_AUD", IsAvailable = true},
         new VoltageBoardChannel { ChannelName = "VDD_DPD_AUD", IsAvailable = true},             
    };

    private ICommand mRefreshAllCommand;
    public ICommand AddChildCommand
    {
        get
        {
            if (mRefreshAllCommand == null)
                mRefreshAllCommand = new DelegateCommand(new Action(mRefreshAllCommandExecuted), new Func<bool>(mRefreshAllCommandCanExecute));

            return mRefreshAllCommand;
        }
        set
        {
            mRefreshAllCommand = value;
        }
    }

    public bool mRefreshAllCommandCanExecute()
    {
        return true;
    }

    public void mRefreshAllCommandExecuted()
    {                               
        VoltageChannelList = bavaria1Channels;          
        // Call OnChildAdd Method here                      
    }

私のラベルを持つXAMLビュー:

<Label Grid.Column="0" Content="{Binding ChannelName}" Height="25" Width="120" Name="VoltageLabel" />

VoltageBoardチャネルクラス:

public class VoltageBoardChannel
{
    public string ChannelName { get; set; }
    public bool IsAvailable { get; set; }
}     

ボタンクリックで呼び出されるメソッド。クリックした後OnChildAdd()、これらのアイテムのリストをスタックパネルに追加するためにメソッドを呼び出しLISTます。出来ますか???

4

1 に答える 1

1

xamlの場合:

<Button Command={Binding AddChildCommand} />

ビューモデルの場合:

public ICommand AddChildCommand { get; private set; }

次に、ビューモデルのコンストラクターで、AddChildCommandを実装するオブジェクトに設定しますICommand。このコマンドは、OnChildAdd()メソッドを呼び出すことができます。(ここに仕様があります)

ただし、これを行うためのより良い方法は、stackpanelのChildrenをビューモデルのプロパティにバインドしてから、それにVoltageChannelViewsを追加することです。

于 2012-10-12T13:18:08.637 に答える