如何在Silverlight中定义mvvm模型中的事件

时间:2010-09-04 03:58:12

标签: silverlight-3.0

我有一个用我的mainpage.xaml

中的事件定义的combox控件
  <Grid x:Name="LayoutRoot">
<ComboBox SelectionChanged="ComboBox_SelectionChanged"></ComboBox>
  </Grid>

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

        }

现在我们如何在mvvm模型中定义combox控件的事件。

以及如何将集合列表绑定到组合框。我正在使用SL 3

感谢

王子

1 个答案:

答案 0 :(得分:1)

在你的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中,您选择的已更改方法可以在您使用SL3时调用ViewModel上的方法:

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将MyTtems集合和SelectedItem绑定到:

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。

希望这有帮助!