私はWPFには比較的新しく、カスタムクラスをデータグリッドにバインドするのに苦労しています。テキストプロパティはOKですが(いずれにしても読み取り専用です)、ブール値プロパティのトグルボタンはアイテムリストで更新されず、最初に設定された値に従って表示されません。ただし、UIのクリックに対しては正しく応答します。ToggleButtonバインディングを使用したWPFデータグリッド
<Style x:Key="ToggleImageStyleBien" TargetType="ToggleButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<StackPanel>
<Image Name="img" Source="Images/transp.png"/>
</StackPanel>
<ControlTemplate.Triggers>
<Trigger Property="ToggleButton.IsChecked" Value="True">
<Setter TargetName="img" Property="Source" Value="Images/good.png"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
ここでは、データグリッドそのものです:
<DataGrid AutoGenerateColumns="False" Height="Auto" Name="dataGridRevision" Width="Auto" Margin="6,6,6,0" ItemsSource="{Binding}" VerticalScrollBarVisibility="Auto" VerticalGridLinesBrush="{x:Null}">
<DataGrid.Columns>
<DataGridTextColumn Header="Code" Binding="{Binding Code}" Visibility="Collapsed"/>
<DataGridTextColumn Header="Descripción" Binding="{Binding Description}" IsReadOnly="True"/>
<DataGridTemplateColumn Header="Bien">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ToggleButton Style="{StaticResource ToggleImageStyleBien}" Click="ToggleButton_Click" IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=ReviewItem.Good, Mode=TwoWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Comentario" />
</DataGrid.Columns>
</DataGrid>
これは私がに結合していたクラスです。私の知る限り、私は右を使用していないよ、言うことができるように
public class ReviewItem
{
public string Code { set; get; }
public string Description { set; get; }
public bool Good { set; get; }
public bool Bad { set; get; }
public string Comment { set; get; }
}
ToggleButtonのBindingプロパティですが、私はたくさん試してみてアイデアが足りなくなっています。リストプロパティはクリックで変更されません。値はデータに応じて表示されません。
...
感謝を助けてください!
Joerg。
が見つかりました。他の例をもとに、これにクラスを変更:
public class ReviewItem : INotifyPropertyChanged
{
public string Code { set; get; }
public string Description { set; get; }
public bool Bad { set; get; }
public string Comment { set; get; }
private bool _isChecked;
public bool Good
{
get { return _isChecked; }
set
{
System.Diagnostics.Debug.WriteLine("Good = " + value);
_isChecked = value;
OnPropertyChanged("Good");
}
}
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
こんにちはレイチェル!まず、お返事いただきありがとうございます。そして、私の遅い返事を言い訳してください。これは私の最初の投稿だったので、誰かが応答したら電子メール通知を受け取ると思っていました。 あなたの提案については、私が変更しなければならないラインは、次のようなものでしょうか? {Type:UserControl}}、Path = ReviewItem.Good、Mode = TwoWay} " ' 正しい解決策は何でしょうか? ありがとう、 Joerg。 –
Joerg
バインドを ' 'スヌープでバインディングエラーが発生しません。それでも、ReviewItemsコレクションはtrueまたはfalseの値を更新していません。これを使用して値を確認しています: 'foreach(ReviewItem in ReviewItems){textBoxComments.Text + = it.Description +": "+ it.Good.ToString()+ "\ r \ n"; } ' –
Joerg
@ user1058209あなたのバインディングを' ReviewItem.Good'から 'DataContext.ReviewItem 'に変更する必要があります。'UserControl'には' ReviewItem'という名前のプロパティはありませんが、 'UserControl.DataContext'はそうです。 ' ' –
Rachel