私は、DataGridをINotifyPropertyChangedを実装するアイテムのObservableCollectionにバインドしています。 1つの列だけが編集可能です。別の列は、その列で編集された値に基づいて自動的に変更したいイメージです。それは動作しません。私はFODYを使用しています私のビューモデルWPF Datagridトリガーが機能しない
の部品を追加して、私の構造はかなり複雑である:それは右
<DataGrid ItemsSource="{Binding ItemRows,UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" AutoGenerateColumns="False"
CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="false">
<DataGrid.Columns>
<DataGridTextColumn Header="Editable" Binding="{Binding Editable, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image x:Name="imgComplete" Width="20" Height="20">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Setter Property="Source" Value="{StaticResource imgCheckmarkOrange}" />
<Style.Triggers>
<DataTrigger Value="0" Binding="{Binding Editable,UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}">
<Setter Property="Source" Value="{StaticResource imgSadFace}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
を編集した後EDIT私は、例えば、行ヘッダーをクリックした場合(ソート)を更新するのではなく、ので、私はデータグリッドのソース
このコレクションは、別のプロパティクラスの変化にデータベースからデータがロードされ
[ImplementPropertyChanged]
public class MyViewModel
{
....
public ObservableCollection<StockOrderRow> ItemRows { get; set; } = new ObservableCollection<StockOrderRow>();
.....
}
「StockOrに関連した唯一のものを掲載していますderRow」
public class StockOrderRow : BaseEntity
{
public string Field1{ get; set; } = "";
...
public int Editable { get; set; } = 0;
}
とクラス "BaseEntity" 私はあなたの編集可能なプロパティのDataGridTemplateColumnを使用することをお勧めします
public class BaseEntity: INotifyPropertyChanged
{
public string Id { get; set; }
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
あなたのviewmodel [s]コードを投稿してください。 – ASh