В настоящее время я работаю над приложением WPF, которое использует MVVM. У меня есть ListBox с установленным стилем, чтобы он отображался как RadioButtonList следующим образом:
<Style x:Key="RadioButtonList" TargetType="{x:Type ListBox}">
<Setter Property="BorderBrush" Value="{x:Null}" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="{x:Type ListBoxItem}" >
<Setter Property="Margin" Value="2" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Border Background="Transparent">
<RadioButton Focusable="False" IsHitTestVisible="False" IsChecked="{TemplateBinding IsSelected}" Content="{Binding Path=DisplayName}" Command="{Binding ElementName=ShippingWindow, Path=DataContext.ShipOtherMethodSelected}">
</RadioButton>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
</Style>
<ListBox Name="lbShipOtherMethodOptions" Style="{StaticResource RadioButtonList}" ItemsSource="{Binding Path=ShipOtherMethodOptions}" Margin="13,74,366,282" />
То, что я пытаюсь сделать, это привязать команду к RadioButton, чтобы я мог запустить событие, когда сделан выбор. У меня есть следующий код в моей view-модели, но я не могу его запустить:
private ICommand shipOtherMethodSelected;
public ICommand ShipOtherMethodSelected
{
get
{
return shipOtherMethodSelected ??
(shipOtherMethodSelected = new RelayCommand(param => ShipOpenItems(), param => true));
}
}
private void ShipOpenItems()
{
MessageBox.Show("GOT HERE");
}
Я довольно новичок в WPF и MVVM, поэтому я, вероятно, упускаю что-то очевидное. Кто-нибудь может указать мне правильное направление?
EDIT:
По предложению jberger, я вставил некоторый код, который я пытался, но он не работал. Установка точек останова в этом разделе не сработала, и не появилось окно сообщения.
РЕДАКТИРОВАТЬ 2:
Поэтому после проверки DataContext на отправителе выясняется, что он указывает на объект, с которым я связываю RadioButton, а не на мою модель просмотра. Я обновил приведенный выше код (добавив x: Name в мое окно и обновив привязку Command), и теперь я получаю событие, которое запускается при его первоначальном связывании, но оно не запускается при выборе значения. Похоже, мы сейчас очень близко.