當我的模型中的屬性值爲true時,我想要爲控件輕鬆使用只讀模板。爲此,我創建了一個IValueConverter,它在源值爲true時返回它的參數(在這種情況下爲模板),而在false時爲Binding.DoNothing。是否可以使用Binding.DoNothing取消WPF綁定到Control.Template屬性?
當我將它應用於我的控件時,我得到一個沒有Template的控件。
當我的模型中的屬性值爲true時,我想要爲控件輕鬆使用只讀模板。爲此,我創建了一個IValueConverter,它在源值爲true時返回它的參數(在這種情況下爲模板),而在false時爲Binding.DoNothing。是否可以使用Binding.DoNothing取消WPF綁定到Control.Template屬性?
當我將它應用於我的控件時,我得到一個沒有Template的控件。
這聽起來像你可以使用一個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>
如果這不是你想要的,也許在你的文章中添加一些示例代碼。
我已經使用類似於你的方法的東西(我已經使用了行爲)實際解決了它,但我很好奇爲什麼DoNothing不起作用...... – 2011-04-14 18:42:34
我試過簡單地返回Binding.DoNothing在我的轉換器,所以我知道問題不在那裏。 – 2011-04-14 17:56:26