2011-01-20 6 views
1

DataGridのXMLから生成されたハイパーリンクに一意のコマンドを渡す必要があります。XMLから文字列を変換してICommandを返す方法は?

このようにハイパーリンクを直接指し示すと、そのコードの中にコマンドがあります。

<Hyperlink Style="{DynamicResource DataGridCellStyleHyperlink}" Command="{x:Static local:MainWindow.LaunchFirstCommand}"> 

私は似ていますが、セル内の各ハイパーリンクに異なるコマンドを動的に割り当てる必要があります。すべてのハイパーリンクはXMLから生成されます。私はそれを行うコンバータのいくつかの並べ替えを持つ必要があると思う。私はそれを動作させるのに問題があります。いかなるアドバイスも高く評価されます。前もって感謝します。

ここには、DataGrid内にコンテンツを生成するXMLDataProdiderコードがあります。文字列として 'Command'値を渡そうとしました:

<XmlDataProvider x:Key="MoreInfoDataGridLocal" XPath="MoreInfoTiles/Servers"> 
     <x:XData> 
     <MoreInfoTiles xmlns=""> 
     <Servers Name="Test1" Status="003" Name2="Connection 2" Status2="assigned" /> 
      <Servers Name="Test2" Status="Not activated" Name2="Address" Status2="test" /> 
      <Servers Name="Test3" Status="Disabled" Name2="Address" Status2="None" Command="x:Static local:MainWindow.LaunchFirstCommand"/> 
     </MoreInfoTiles> 
     </x:XData> 
    </XmlDataProvider> 

私は正常にテキスト文字列を生成できますが、コマンドは何もしません。以下は、私がデータグリッド内のハイパーリンクにそれをフックアップコードです:

<DataGridTemplateColumn> 
<DataGridTemplateColumn.CellTemplate>  
    <DataTemplate>  
     <TextBlock >   
      <Hyperlink Style="{DynamicResource DataGridCellStyleHyperlink}" Command="{Binding [email protected]}" >   
       <TextBlock Text="{Binding [email protected]}" />             
      </Hyperlink>       
     </TextBlock>  
    </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate>    
</DataGridTemplateColumn> 

答えて

2

はい、あなたは、コマンドオブジェクトに文字列を変換するためにIValueConverterを使用する必要があります。あなたのコマンドバインディングは、次のようになります。

Command="{Binding [email protected], Converter={StaticResource MyStringToCommandConverter}}" 

、あなたがリソースとして作成されたコンバータのインスタンスが必要になります。

<MyStringToCommandConverter x:Key="MyStringToCommandConverter"/> 
あなただけMyStringToCommandConverter(またはものは何でもあなたを作成する必要があること以外

それはIValueConverterを実装するクラスであり、Convertメソッドでは、 "value"文字列をあなたのルーティングされたコマンドの1つに翻訳します。単純なコンバータは次のようになります。

public class MyStringToCommandConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     string commandType = value as String; 
     if (commandType == "LaunchFirstCommand") 
      return MainWindow.LaunchFirstCommand; 
     if (commandType == "OtherCommand") 
      return MainWindow.OtherCommand; 
     return null; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new System.NotImplementedException(); 
    } 
} 
+0

このIValueConverterのサンプルがあるかどうかは疑問です。ありがとうございました。 – vladc77

+0

サンプルコンバータが追加されました。 –

+0

超クールです。今は完璧に動作しています。大いに感謝する!私はあなたの助けに非常に感謝します! – vladc77

関連する問題