我有以下自定义用户控件:
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更改 像简单的文本框绑定,还是任何元素?
答案 0 :(得分:1)
您的TextBoxWithPlaceHolder.Text
会在PropertyChanged
后更新来源,但其中的TextBox
只会在TextBoxWithPlaceHolder.Text
上更新LostFocus
属性(TextBox
的默认值1}})。因此,您应修改TextBox.Text
上的绑定并设置UpdateSourceTrigger=PropertyChanged
。
答案 1 :(得分:1)
如果不设置UpdateSourceTrigger
到TextBox
内定义的UserControl
绑定的PropertyChanged
属性,则无法执行此操作。
Text
控件的TextBoxWithPlaceHolder
属性的绑定与控件内定义的TextBox
控件的绑定不同。这是两个独立的Binding
对象,在不同的类中定义和创建,具有各自的UpdateSourceTrigger
属性。
换句话说,TextBoxWithPlaceHolder
控件的使用者不控制作为(控件本身的内部逻辑)一部分的UpdateSourceTrigger
的{{1}}。只有你作为控制作者才能控制它。
如果您真的希望使用者能够更改TextBox
的{{1}},您可以向UpdateSourceTrigger
控件添加依赖项属性并注册一个创建新的回调绑定并将新绑定的TextBox
属性设置为适当的值。