0

ListBox があり、各項目には TextBlock と Button があります。ボタンにはコマンドがあります。問題は、ボタンをクリックしてもリストボックスの選択項目が変わらないことです。( selectionchanged イベントは発生しないと思います)。テキストブロックをクリックすると、正常に動作します。

<ListBox ItemsSource="{Binding FavList}" SelectedItem="{Binding SelectedFav,Mode=TwoWay}">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <Grid>
                                    <TextBlock Text="{Binding Name}"/>
                                    <Button Content="+" Command="{Binding Source={StaticResource ViewModel},Path=AddToFavCommand}" Margin="120,0,0,0"/>
                                </Grid>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>

私のビューモデルの関連部分(問題はないと思います):

private Products _selectedFav;
        public Products SelectedFav
        {
            get
            {
                return _selectedFav;
            }
            set
            {
                if (value != _selectedFav)
                {
                    _selectedFav = value;
                    NotifyPropertyChanged("SelectedFav");
                }
            }
        }

public DelegateCommand AddToFavCommand { get; set; }
AddToFavCommand = new DelegateCommand(addtofav);

private void addtofav(object parameter){
}

したがって、コマンドを実行する前に、選択した項目を変更する必要があります。どうやってやるの?

4

1 に答える 1

1

ここでは ListBox を使用しないことをお勧めします。実際に項目を選択する必要がある場合にのみ、ListBox を使用してください。代わりに、ItemsControl を検討してください。

次の問題は、選択したアイテムを渡すことです。これを行うには、次のように CommandParameter を現在のアイテムにバインドします。

CommandParameter="{Binding}"

次に、パラメーターを受け入れるようにコマンドを変更する必要があります。DelegateCommand では、Prism を使用している可能性がある (または独自の DelegateCommand を作成した) ように見えますが、パラメーターを受け入れるように設定できるかどうかはわかりません。MVVM Light (および RelayCommand) の場合は次のようになります。

public RelayCommand<Products> AddToFavCommand { get; private set;}

次に、コマンドを設定する場所:

AddToFavCommand = new RelayCommand<Products>((p)=>AddToFav(p));

または、より簡単に、メソッド グループを使用します。

AddToFavCommand = new RelayCommand<Products>(AddToFav);

private void AddToFav(Products p)
{

     //do stuff
}
于 2012-03-07T14:37:57.557 に答える