1

对于上下文,我希望复制 ESRI 为地图可视化应用程序实现的 FeatureDataGrid。使用 MVVM,我将地图和数据绑定到一个可观察的数据点集合。每个 DataPoint 都有一个 IsSelected 属性,当您更改数据网格中的关联复选框或单击表示它的地图图形时,该属性会被切换。

我想从数据网格中删除 IsSelected CheckBoxColumn,而是通过简单地在数据网格中选择它来更改 DataPoint 的 IsSelected 属性。

在数据网格中选择某些内容会改变 IsSelected,这应该通过图形颜色/大小的变化自动反映在地图上。相反,在地图中选择对象应该使它们在数据网格中突出显示。

这可能吗?我应该从哪里开始?

以下是一些无效的尝试:

        <sdk:DataGrid x:Name="datagrid" HorizontalAlignment="Left" Width="400" ItemsSource="{Binding Path=Data, Mode=TwoWay}">
            <sdk:DataGrid.RowStyle>
                <Style TargetType="sdk:DataGridRow">
                    <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
                </Style>
            </sdk:DataGrid.RowStyle>
        </sdk:DataGrid>

        <sdk:DataGrid x:Name="datagrid" HorizontalAlignment="Left" Width="400" ItemsSource="{Binding Path=Data, Mode=TwoWay}" SelectedItem="{Binding IsSelected, Mode=TwoWay}"/>

需要明确的是,地图绑定到集合,并不是这个问题的重要部分——我只是在寻找一种方法将 DataPoint 的 IsSelected 属性绑定到 DataGridRow 的突出显示/选定状态。

让我知道更多信息是否有用。

编辑

我找到了一个我认为违反 MVVM 并添加一些(希望)不必要的逻辑的解决方案。也许对 MVVM 更了解的人可以评论并说服我,或者确认我的倾向:

把它放在后面的代码中:

    public MainPage()
    {
        InitializeComponent();
        Messenger.Default.Register<DataPointSelectedMessage>(this, DataPointSelectedChange);
    }

    private void DataPointSelectedChange(DataPointSelectedMessage msg)
    {
        if (datagrid.SelectedItems.Contains(msg.Content))
        {
            datagrid.SelectedItems.Remove(msg.Content);
        }
        else
        {
            datagrid.SelectedItems.Add(msg.Content);
        }
    }

编辑 2

我对 Silverlight 还是很陌生。原来 ListBox 默认情况下会执行我正在寻找的行为。以下是遇到此问题的任何人的相关代码:

        <ListBox ItemsSource="{Binding Path=Data, Mode=TwoWay}" SelectionMode="Multiple">
            <ListBox.ItemContainerStyle>
                <Style TargetType="ListBoxItem">
                    <Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsSelected}"/>
                </Style>
            </ListBox.ItemContainerStyle>
        </ListBox>

但是,我仍然有兴趣获得有关使用数据网格实现此功能的输入。我可能最终需要一些数据网格功能。

谢谢。

4

0 回答 0