私はDevExpress GridControlをWPFでバインドされたItemsSource
とカラムのフィールドに持っています。データソース内の値を初期化すると、すべて正常に動作しますが、データが更新される予定のときは正常に動作しません。DevExpress GridControl ItemsSourceでバウンド値を更新しようとしています
また、GridControlを含むユーザーコントロール内にラベルがあり、それは正常に更新されます。
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="250" />
<RowDefinition Height="3*" />
</Grid.RowDefinitions>
<dxg:GridControl Grid.Row="0" x:Name="grid" DataContext="{StaticResource ParamDataSource}" ItemsSource="{Binding Path=ObservableParams}">
<dxg:GridControl.Columns>
<dxg:GridColumn x:Name="ParamName" FieldName="ParamName" MinWidth="80" Width="80" AllowResizing="False" FixedWidth="True" Header="Parameter" />
<dxg:GridColumn x:Name="ParamValue" Binding="{Binding ParamValue}" MinWidth="50" Width="50" SortIndex="0" Header="Best Value" />
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView VerticalScrollbarVisibility="Hidden" x:Name="view" ShowGroupPanel="False" AllowFixedGroups="True" ShowGroupedColumns="False" AllowCascadeUpdate="False" AllowScrollAnimation="False" NavigationStyle="Row" AutoWidth="True" ShowFixedTotalSummary="False" />
</dxg:GridControl.View>
</dxg:GridControl>
<Label DataContext="{StaticResource ParamDataSource}" Content="{Binding LabelText}" Margin="10, 10, 10, 10" Grid.Row="1"/>
</Grid>
し、データソースのためのC#コード...
class ParamDataSource : ViewModelBase // using DevExpress.Mvvm above
{
public ParamDataSource()
{
// This stuff is put on the grid no problem.
ObservableParams = new System.Collections.ObjectModel.ObservableCollection<ParamTableRow>
{
new ParamTableRow
{
ParamName = "Param1",
ParamValue = 0
},
new ParamTableRow
{
ParamName = "Param2",
ParamValue = 0
},
new ParamTableRow
{
ParamName = "Param3",
BestValue = 0
}
};
LabelText = "Starting Now";
}
public ObservableCollection<ParamTableRow> ObservableParams { get; set; }
public string LabelText { get; set; }
public void UpdateParam(int paramIndex, decimal? paramValue)
{
ObservableParams[paramIndex].ParamValue = paramValue;
RaisePropertyChanged("ObservableParams");
// This label updates on the view just fine, but not the parameter values...
LabelText = string.Format("Done Param {0}", paramIndex);
RaisePropertyChanged("LabelText");
}
}
public class ParamTableRow
{
public string ParamName { get; set; }
public decimal? ParamValue { get; set; }
}
何らかの理由で私はそれが 'INotifyPropertyChanged'を実装しなければならない' ParamDataSource'であり、 'ViewModelBase'が世話をしていたと思っていました... – colmde
@colmde' ViewModelBase'はクラスを継承し、 'RaisePropertyChanged(string propertyName)'を利用する機会を与えます。しかし、あなたはこのメソッドを利用していないので、何も起こりません。プロパティのセッターに 'RaisePropertyChanged(string propertyName)'と書くだけで、モデルのすべてのデータが更新されます。 – StepUp