WPF MVVM中控件模板绑定的默认值

时间:2016-03-21 14:11:05

标签: c# wpf xaml binding mvvm-light

可能是一个愚蠢的问题,但要在WPF ControlTemplate中为绑定设置默认值,在性能方面最好的方法是什么?

我尝试了几个选项:

  • 优先约束:它不起作用,可能是我的坏......
  • ControlTemplate Trigger:效果很好,我在一个总是在我的情况下返回true的属性上使用它:

    <ControlTemplate.Triggers>
        <Trigger Property="IsEnabled" Value="True">
            <Setter Property="TextBoxWidth" Value="300" />
        </Trigger>
    </ControlTemplate.Triggers>
    
  • FallBackValue:效果也很好。

使用触发器,FallBackValue还是有其他方法可以做到这一点吗?

提前致谢

-----------------更新----------------

经过更多的研究,似乎实现我的目标的最好方法是简单地使用样式...... 我不知道为什么它首先不起作用,但这样做似乎有效:

<Style  TargetType="local:EditableWidthText">
    <Setter Property="TextBoxWidth" Value="300"/>
</Style>

不再需要FallbackValue。当有绑定,没有绑定以及被另一个样式覆盖时,它可以工作。正是我需要的。

感谢Sinatr对FallbackValue表现的评论。 Fyi Priority Binding:

PriorityBinding lets you associate a binding target (target) property with a list of bindings. 
The first binding that returns a value successfully becomes the active binding.

https://msdn.microsoft.com/en-us/library/system.windows.data.prioritybinding%28v=vs.110%29.aspx

我从未使用模板选择器或datatemplate,但我认为这对我的需求有点过分,不是吗?

-----------------更新#2 ----------------

@Sinatr: 我有一个Mainviewmodel,它包含几个ViewModel绑定到MainView中显示的几个用户控件。 (像我的另一篇文章:Navigate through UserControl with MVVM LIGHT (WPF)

但是这个controlTemplate用于一个looklessControl(非常简单,一个标签和一个文本框)。

在这个LookLess控件中,我创建了4个依赖项属性。 在控件模板中,我将其中的2个绑定到文本框/标签的文本/内容属性 和两个宽度。 (我希望用户能够在将来创建表单,绑定方式)。 例如,ControlTemplate中的标签如下所示:

 <Label   
    Width="{Binding Path=LabelWidth,
         RelativeSource={RelativeSourceAncestorType=local:EditableWidthText}}" 
    Content="{Binding Path=LabelText, 
         RelativeSource={RelativeSource AncestorType=local:EditableWidthText}}"/>

我只是希望在没有定义绑定时宽度等于130。 但是由于绑定失败或类似的事情,我不想要性能问题。

模板选择器非常有趣,但我认为不适用于我的情况。 数据中没有切换,它只是一个默认值。所以我认为也不适用。 (但也许我错了:p)

所以也许我认为样式是要走的路?

0 个答案:

没有答案