2011-01-20 38 views
1

我需要能夠將一個唯一的命令傳遞給從DataGrid中的XML生成的超鏈接。如何從XML轉換字符串以返回ICommand?

如果我用這種方法直接指向超鏈接,我在代碼背後有代碼中的命令。

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

我需要做類似的工作,但不同的命令動態分配給每個超鏈接。所有的超鏈接都是從XML生成的。我相信我需要有某種轉換器可以做到這一點。我無法使其工作。任何建議是高度讚賞。先謝謝你。

這是生成DataGrid內部內容的XMLDataProdider代碼。我試圖通過作爲一個字符串的'命令'值:

<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」字符串轉換爲您的一個路由命令。一個簡單的轉換器看起來像這樣:

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 2011-01-20 03:22:47

相關問題