根据Silverlight中的对象属性突出显示(选择)DataGridRow

时间:2012-07-02 18:49:43

标签: c# silverlight mvvm datagrid esri

对于上下文,我希望复制ESRI为地图可视化应用程序实现的FeatureDataGrid。使用MVVM,我将地图和数据绑定到可观察的DataPoints集合。每个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

我还是银光的新手。结果列表List默认执行我正在寻找的行为。以下是遇到此问题的任何人的相关代码:

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

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

感谢。

0 个答案:

没有答案