C# MVVM视图模型事件(命令?)

C# MVVM视图模型事件(命令?),c#,wpf,mvvm,itemssource,C#,Wpf,Mvvm,Itemssource,我有一个MVVM设置,可以在我的主窗口上创建一个视图。我不知道如何知道用户何时单击视图中的特定通知项。我应该在哪里添加事件,或者添加一个命令来知道何时发生 以下是我的MVVM代码: 主窗口 政务司司长: xaml: 通知视图模型 公共类通知视图模型 { 私有ObservableCollection_Notifications=新ObservableCollection(); 公开收集通知 { 获取{返回_通知;} 设置{u通知=值;} } 公共无效添加通知(通知模型通知) { 此.Notifi

我有一个MVVM设置,可以在我的主窗口上创建一个视图。我不知道如何知道用户何时单击视图中的特定通知项。我应该在哪里添加事件,或者添加一个命令来知道何时发生

以下是我的MVVM代码:

主窗口 政务司司长:

xaml:

通知视图模型
公共类通知视图模型
{
私有ObservableCollection_Notifications=新ObservableCollection();
公开收集通知
{ 
获取{返回_通知;}
设置{u通知=值;}
}
公共无效添加通知(通知模型通知)
{
此.Notifications.Insert(0,通知);
}
}
通知视图


项控件中没有真正的选择机制。为
列表框
关闭
项控件
,可能会解决您的问题

如果这样做,您可以绑定到
SelectedItem
,然后使用
PropertyChanged
事件处理对
SelectedItem
所做的任何更改

例如:

在视图模型的构造函数中:

PropertyChanged += NotificationViewModel_PropertyChanged;
将属性添加到视图模型以允许绑定:

private string _selectedNotification;
public string SelectedNotification
{
    get { return _selectedNotification; }
    set
    {
        if (_selectedNotification != value)
        {
            _selectedNotification = value;
            RaisePropertyChanged("SelectedNotification");
        }
    }
}
最后,将事件处理程序添加到视图模型中:

NotificationViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e))
{
    if (e.PropertyName = "SelectedNotification") DoStuff();
}

如果只想根据列表框中的选定项更新视图中的另一个控件,您可能会发现甚至不需要挂接到
PropertyChanged
。您可以直接绑定到xaml中的属性。

谢谢。但是,我将
SelectedNotification
从type(string)更改为type(int),然后可以将其绑定到我的
NotificationListBox的
SelectedIndex
。然后,我将此
SelectedIndex
用作我的
可观察收集通知
中的索引。我感谢你的帮助。
public class NotificationViewModel 
{
    private ObservableCollection<NotificationModel> _Notifications = new ObservableCollection<NotificationModel>();
    public ObservableCollection<NotificationModel> Notifications 
    { 
        get { return _Notifications; } 
        set { _Notifications = value; } 
    }

    public void AddNoticiation(NotificationModel notification)
    {
        this.Notifications.Insert(0, notification);
    }
}
<Grid>
    <StackPanel HorizontalAlignment="Left" >
        <ItemsControl ItemsSource="{Binding Path=Notifications}"
                      Padding="5,5,5,5">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Border Background="SlateGray"
                            CornerRadius="4">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="100" />
                                <ColumnDefinition Width="100" />
                                <ColumnDefinition Width="100" />
                            </Grid.ColumnDefinitions>
                            <TextBlock Grid.Column="0" 
                                       Text="{Binding Path=TimeStamp}" />
                            <TextBlock Grid.Column="1" 
                                       Text="{Binding Path=Name}" />
                            <TextBlock Grid.Column="2" 
                                       Text="{Binding Path=Message}" />
                        </Grid>
                    </Border>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </StackPanel>
</Grid>
PropertyChanged += NotificationViewModel_PropertyChanged;
private string _selectedNotification;
public string SelectedNotification
{
    get { return _selectedNotification; }
    set
    {
        if (_selectedNotification != value)
        {
            _selectedNotification = value;
            RaisePropertyChanged("SelectedNotification");
        }
    }
}
NotificationViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e))
{
    if (e.PropertyName = "SelectedNotification") DoStuff();
}