将事件绑定到属性的替代方法

时间:2015-12-31 08:36:40

标签: c# mvvm win-universal-app commandbinding event-binding

我有一个列表框,但是如果我点击某个项目,我必须看到该项目的详细信息。我创建了此代码,我尝试将SelectionChanged事件绑定到属性类型RelayCommand,模式是双向的。

<ListBox Grid.Row="2" Grid.Column="0"  Grid.ColumnSpan="3" 
         SelectedItem="{Binding SelectedVillage, Mode=TwoWay}" 
         ItemContainerStyle="{StaticResource lstidflt}" 
         SelectionChanged="{Binding SelectedVillageChanged, Mode=TwoWay}"
         ItemTemplate="{StaticResource weatheritemdt}" 
         ItemsSource="{Binding VillageList}" />

当然,这不起作用,因为您无法将事件绑定到属性或属性到方法,反之亦然。您只能将属性绑定到属性。那么问题是现在是否有将SelectionChanged事件绑定到属性的替代方法?

我在具有MVVM灯架构的Windows通用10应用程序中使用C#。

2 个答案:

答案 0 :(得分:1)

你可以让SelectedItem属性的绑定

<ListBox ItemsSource="{Binding VillageList}" SelectedItem="{Binding SelectedVillage, Mode=TwoWay}" />

在setter中完成工作

public class VillageViewModel
{
    public ObservableCollection<Village> VillageList { get; set; } 

    private Village selectedItem;
    public Village SelectedItem
    {
        get { return selectedItem; }
        set
        {
            if (selectedItem == value)
                return;
            selectedItem = value;
            // Do logic on selection change.
        }
    }
}

答案 1 :(得分:1)

我所做的(在WPF中)将所选项目绑定到完整属性,然后在设置部分中引发事件。它看起来像这样;

private Village _SelectedVillage;
public Village SelectedVillage{
get {return _SelectedVillage;}
set {
    _SelectedVillage = value;
    RaiseEvent myEvent();
}
}

您还可以提升relay命令或检查xaml中的触发器。如果您使用该属性,请查看依赖属性,如果它在win 10 universal中可用。