Ваша кнопка ничего не делает. Обычно ваша ViewModel будет иметь ICommand с именем Select (или что-то подобное), что Button будет привязан к
Command="{Binding Select, ElementName="root"}"
и вы передадите экземпляр ICommand, который хотите выбрать
CommandParameter="{Binding}"
Это будет выглядеть примерно так (c # / XAML, как псевдокод):
public class MyModel { public string Name {get;set;} }
public class MyViewModel
{
public ObservableCollection<MyModel> Models {get;set;}
public ICommand Select {get;set;}
/* configure Models and Select etc */
}
<UserControl DataContext="{StaticResource MyViewModelInstance}" x:Name="root">
<ItemsControl ItemsSource="{Binding Models}">
<ItemsControl.ItemTemplate>
<ItemsPanelTemplate>
<Button Text="{Binding Name}"
Command="{Binding Select, ElementName="root"}"
CommandParameter="{Binding}"/>
</ItemsPanelTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</UserControl>
ItemsControl связывается с Моделями , поэтому каждая MyModel в Моделях получает кнопку. Текст кнопки привязан к свойству Имя . Команда кнопки привязана к свойству Select в ViewModel. Когда кнопка нажата, она вызывает ICommand, отправляя в случае MyModel , с которой связана кнопка.
Обратите внимание, что использование ViewModels в UserControl
- это кодовый запах . UserControl
должны отображаться пользователям как все остальные элементы управления - они должны иметь привязываемые общедоступные свойства, которые привязаны к ViewModel пользователя, а не к вам. Затем вы привязываетесь к значениям этих свойств в UserControl
. В этом примере у вас будет ItemsSource свойство, определенное в вашем UserControl
, и ItemsControl
будет привязываться к этому свойству, а не ViewModel напрямую.