将事件绑定到属性的备选方案

本文关键字:方案 属性 事件 绑定 | 更新日期: 2023-09-27 18:28:32

我有一个列表框,但如果我点击一个项目,我必须看到该项目的详细信息。我编写了这段代码,试图将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#。

将事件绑定到属性的备选方案

您可以让SelectedItem属性的绑定

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

并在设置中完成工作

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.
        }
    }
}

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

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

您也可以在xaml中引发relaycommand或检查触发器。如果你选择这个属性,看看依赖属性,如果它在win 10 universal中可用。