как определить события в модели MVVM в Silverlight - PullRequest
0 голосов
/ 04 сентября 2010

У меня есть элемент управления combox, определенный с событиями в моей mainpage.xaml

  <Grid x:Name="LayoutRoot">
<ComboBox SelectionChanged="ComboBox_SelectionChanged"></ComboBox>
  </Grid>

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

        }

Теперь, как мы определяем события для элемента управления combox в модели mvvm.

и как связать список сбора со списком.я использую SL 3

спасибо

принц

1 Ответ

1 голос
/ 07 сентября 2010

В вашем xaml вы можете связать ItemSource и SelectedItem, как показано ниже:

MainPage.xaml

<UserControl x:Class="App1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:App1"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">

<UserControl.DataContext>
    <local:MainPage_ViewModel/>
</UserControl.DataContext>

<Grid x:Name="LayoutRoot" Background="White">
    <ComboBox ItemsSource="{Binding MyItems}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" SelectionChanged="ComboBox_SelectionChanged" Height="30" Width="100"/>
</Grid>

В MainPage.xaml.cs,ваш измененный метод Selection может просто вызвать метод в вашей ViewModel, так как вы используете SL3:

MainPage.xaml.cs

public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();
    }

    private MainPage_ViewModel viewModel
    {
        get { return this.DataContext as MainPage_ViewModel; }
    }

    private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        this.viewModel.SelectionChanged();
    }
}

Ваш ViewModel будет иметь коллекцию MyItems и SelectedItem для привязкиto:

MainPage_ViewModel.cs

public class MainPage_ViewModel : INotifyPropertyChanged
{
    public ObservableCollection<string> MyItems
    {
        get { return myItems; }
        set { myItems = value; }
    }
    private ObservableCollection<string> myItems = new ObservableCollection<string>() { "One", "Two", "Three" };

    public string SelectedItem
    {
        get { return selectedItem; }
        set { selectedItem = value; }
    }
    private string selectedItem = string.Empty;

    public void SelectionChanged()
    {
        //Perform logic that needs to happen when selection changes
    }

    public void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
}

В зависимости от того, для чего вы использовали метод SelectionChanged, он может вам больше не понадобиться, так как это связывает SelectedItem с ViewModel.

Надеюсь, это поможет!

...