2011-04-14 114 views
2

當我的模型中的屬性值爲true時,我想要爲控件輕鬆使用只讀模板。爲此,我創建了一個IValueConverter,它在源值爲true時返回它的參數(在這種情況下爲模板),而在false時爲Binding.DoNothing。是否可以使用Binding.DoNothing取消WPF綁定到Control.Template屬性?

當我將它應用於我的控件時,我得到一個沒有Template的控件。

+0

我試過簡單地返回Binding.DoNothing在我的轉換器,所以我知道問題不在那裏。 – 2011-04-14 17:56:26

回答

1

這聽起來像你可以使用一個DataTemplateSelector而非的IValueConverter,東西線沿線的:

//namespace MyProject.ViewUtilities 
public class MyDataTemplateSelector: DataTemplateSelector 
{ 
    public override DataTemplate SelectTemplate(object item, DependencyObject container) 
    { 
     var localFrameworkElement = container as FrameworkElement; 
     var modelObject = item as ModelObject; 

     if(modelObject.BoolProperty){ 
      return Template(localFrameworkElement, "WhenTrueDataTemplate"); 
     } 
     else 
     { 
      return Template(localFrameworkElement, "WhenFalseDataTemplate"); 
     } 
    } 


    private DataTemplate Template(FrameworkElement localFrameworkElement, string resourceKeyString) 
    { 
     return localFrameworkElement.FindResource(resourceKeyString) as DataTemplate; 
    } 
} 

使用類似:

<ComboBox xmlns:mpvu="MyProject.ViewUtilities" 
    ItemsSource="{Binding Path=MyModelObjectCollection}"> 
    <ComboBox.ItemTemplateSelector> 
     <mpvu:MyDataTemplateSelector/> 
    </ComboBox.ItemTemplateSelector> 
</ComboBox> 

如果這不是你想要的,也許在你的文章中添加一些示例代碼。

+0

我已經使用類似於你的方法的東西(我已經使用了行爲)實際解決了它,但我很好奇爲什麼DoNothing不起作用...... – 2011-04-14 18:42:34

相關問題