根据用户的用途更改Custom UserControl的UpdateSourceTrigger

时间:2018-02-27 14:59:54

标签: wpf dependency-properties

我有以下自定义用户控件:

bcp "select * from $table$" queryout $file$.csv -d $db$ -c -t\t -T -S $server$

我正在使用这样的用户控件:

<Grid>
    <TextBlock  x:Name="Placeholder_PART" Background="White" Text="{Binding Placeholder, Mode=TwoWay, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" Foreground="Gray" Margin="4"/>
    <TextBox x:Name="Textbox_PART" Text="{Binding Text, Mode=TwoWay,  RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" Background="Transparent" TextChanged="txt_TextChanged"/>
</Grid>

绑定只有在我失去焦点时才会被激活我甚至很难将其设置为propertychanged,我知道这是因为自定义用户控件的UpdateSourceTrigger是默认值。

如何根据用户UpdateSourceTrigger(在这种情况下属性更改)使自定义用户控件的UpdateSourceTrigger更改 像简单的文本框绑定,还是任何元素?

2 个答案:

答案 0 :(得分:1)

您的TextBoxWithPlaceHolder.Text会在PropertyChanged后更新来源,但其中的TextBox只会在TextBoxWithPlaceHolder.Text上更新LostFocus属性(TextBox的默认值1}})。因此,您应修改TextBox.Text上的绑定并设置UpdateSourceTrigger=PropertyChanged

答案 1 :(得分:1)

如果不设置UpdateSourceTriggerTextBox内定义的UserControl绑定的PropertyChanged属性,则无法执行此操作。

Text控件的TextBoxWithPlaceHolder属性的绑定与控件内定义的TextBox控件的绑定不同。这是两个独立的Binding对象,在不同的类中定义和创建,具有各自的UpdateSourceTrigger属性。

换句话说,TextBoxWithPlaceHolder控件的使用者不控制作为(控件本身的内部逻辑)一部分的UpdateSourceTrigger的{​​{1}}。只有你作为控制作者才能控制它。

如果您真的希望使用者能够更改TextBox的{​​{1}},您可以向UpdateSourceTrigger控件添加依赖项属性并注册一个创建新的回调绑定并将新绑定的TextBox属性设置为适当的值。