2

すでにいくつかの投稿を読みましたが、誰も私の問題を解決してくれませんでした。だから、私はビューモデルを持つビューを持っており、ビュー内にはデータグリッドがビューモデル内のObservableCollectionにバインドされています。選択されたアイテムは、タイプ T == ObservableCollection にもバインドされます

public ObservableCollection<TableProperty> TableProperties
    {
        get
        {
            return tableProperties;
        }
        set
        {
            if (tableProperties != value)
            {
                tableProperties = value;
                OnPropertyChanged("TableProperties");
            }
        }
    }

public TableProperty Property
    {
        get
        {
            return property;
        }
        set
        {
            property = value;
            OnPropertyChanged("Property");
        }
    }

そしてここに DataGrid:

<toolkit:DataGrid AutoGenerateColumns="False" 
                      UseLayoutRounding="True" 
                      ItemsSource="{Binding Path=TableProperties,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,NotifyOnTargetUpdated=True}"
                      SelectedItem="{Binding Path=Property,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
                      [...]>
        <toolkit:DataGrid.Columns>

チェックボックスを変更すると、選択した項目のいくつかの値を設定するコマンドがトリガーされるロジックを実装したいと思います。

<toolkit:DataGridTemplateColumn Header="Mandatory" IsReadOnly="False">
                <toolkit:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                            <CheckBox IsChecked="{Binding Path=Mandatory,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
                                <CheckBox.Style>
                                    <Style TargetType="{x:Type CheckBox}">
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding Path=MandatoryDB}" Value="True">
                                                <Setter Property="IsEnabled" Value="False" />
                                            </DataTrigger>
                                            <DataTrigger Binding="{Binding Path=MandatoryDB}" Value="False">
                                                <Setter Property="IsEnabled" Value="True" />
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </CheckBox.Style>
                                <i:Interaction.Triggers>
                                    <i:EventTrigger EventName="Checked">
                                        <cmd:EventToCommand Command="{Binding Path=DataContext.SetMandatory, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" />
                                    </i:EventTrigger>
                                </i:Interaction.Triggers>
                            </CheckBox>
                        </StackPanel>
                    </DataTemplate>
                </toolkit:DataGridTemplateColumn.CellTemplate>
            </toolkit:DataGridTemplateColumn>

そして、これはその背後にあるコマンドです:

 private void OnSetMandatory()
    {
        property.Visible = true;
        property.ReadOnly = false;
        property.VisibleInGrid = true;
        property.UIPropertyName = DateTime.Now.TimeOfDay.ToString();
        OnPropertyChanged("Property");
        OnPropertyChanged("TableProperties");
    }

問題は、プロパティを変更すると、コレクション内のアイテムも更新され、プロパティ ゲッター内で適切に処理されることです... ビュー内でDatagrid.Items.Refresh()を直接呼び出すと、値も正しく表示されます、ただし、コレクションの更新から自動的にではありません。

それで、あなたは何か考えがありますか?:)

4

1 に答える 1

3

TableProperty クラスは INotifyPropertyChanged を実装し、適切に発生させる必要があります。

于 2012-06-20T08:06:03.150 に答える