2012-03-28 5 views
3

私はWPFの初心者です。バインディング値に応じてWPFデータグリッド行の画像を変更する方法

私は以下のような列定義を持つメッセージを表示するためのデータグリッドを持っています。データグリッドはデータテーブル

<my:DataGridTextColumn Binding="{Binding Module}" Header="Module" 
    Width="75" IsReadOnly="True"></my:DataGridTextColumn> 
<my:DataGridTextColumn Binding="{Binding Record ID}" Header="RecordID" 
    Width="75" IsReadOnly="True"></my:DataGridTextColumn> 
<my:DataGridTextColumn Binding="{Binding ItemName}" 
    Header="Item/Platform/Country Name" Width="175" IsReadOnly="True"> 
    </my:DataGridTextColumn> 
<my:DataGridTextColumn Binding="{Binding DateReceived}" 
    Header="DateReceived" Width="150" IsReadOnly="True"> 
    </my:DataGridTextColumn> 
<my:DataGridTextColumn Binding="{Binding Comments}" Header="Comments" 
    Width="300" IsReadOnly="True"></my:DataGridTextColumn> 

にバインドされている今、私は、「ステータス」としてヘッダとcoulmnを追加する必要があります。画像としてのコンテンツ。私はバインドしています IsReadの値がFalseの場合、私はイメージの表示が必要ですが、IsReadの値がTrueであれば、私はイメージを表示する必要がありますように、この列にデータテーブルの "IsRead"カラムを読み込みます。私はこれをするのですか?

答えて

10

あなたの結合特性を保持しているクラスでStatusImageプロパティを作成することができます。

public string StatusImage { 
    get 
    { 
     if (IsRead) 
      return "read.png"; 
     return "unread.png"; 
    } 
} 

をそして例えば画像にバインド:

<Image Source="{Binding StatusImage}"></Image> 

それとも、あなたのケースのように、クラスを持っていない。

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <Image Name="IsReadImage" Source="read.png"/> 
       <DataTemplate.Triggers> 
        <DataTrigger Binding="{Binding IsRead}" Value="False"> 
        <Setter TargetName="IsReadImage" Property="Source" Value="unread.png"/> 
       </DataTrigger>    
      </DataTemplate.Triggers>   
     </DataTemplate>  
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

それとも、値コンバーター使用することができます:あなたはdatatriggerの間で選択することができ

クラス:

public class IsReadImageConverter : IValueConverter 
{ 
    public Image ReadImage { get; set; } 
    public Image UnreadImage { get; set; } 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (!(value is bool)) 
     { 
      return null; 
     } 
     bool b = (bool)value; 
     if (b) 
     { 
      return this.ReadImage 
     } 
     else 
     { 
      return this.UnreadImage 
     } 
    } 
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

ウィンドウのリソース:

<local:IsReadImageConverter ReadImage="Read.png" UnreadImage="Unread.png" x:Key="BoolImageConverter"/> 

を次に、あなたのだろうバインディング:

ImageSource={Binding Path=IsRead,Converter={StaticResource BoolImageConverter}}" 

すべての機能が必要です。

+0

IsReadはそのクラスでは定義されていません。 IsReadは、データ可能な列です –

+0

よくItemName、Module、DateReceivedなどが指定されていますか?それはクラスの権利からですか? –

+0

これらはデータテーブルの列ではありません –

関連する問題