我想在一个开源应用程序中使用自定义控件。
XAML看起来像这样:
<controls:Scratchpad Grid.Row="1" Grid.Column="2"
Text="{Binding DataContext.KeyboardOutputService.Text, RelativeSource={RelativeSource AncestorType=controls:KeyboardHost}, Mode=OneWay}"/>
Scratchpad控件的代码隐藏如下:
public class Scratchpad : UserControl
{
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof (string), typeof (Scratchpad), new PropertyMetadata(default(string)));
public string Text
{
get { return (string) GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
}
我希望每次在UserControl中更改文本时触发事件处理程序。但是,我没有可以在XAML中使用的TextChanged事件。
我的计划是做这样的事情:
<controls:Scratchpad Grid.Row="1" Grid.Column="2"
Text="{Binding DataContext.KeyboardOutputService.Text, RelativeSource={RelativeSource AncestorType=controls:KeyboardHost}, Mode=OneWay}"
textChanged="EventHandler"/>
但是,此自定义控件中不存在“textChanged”事件。
如您所见,ScratchPad扩展了UserControl。 UserControl还扩展了ContentControl,这就是为什么我认为可以将文本放在这个控件中,它们可能是我不知道的“ContentChanged”事件。
最好,彼得。
答案 0 :(得分:1)
两个选项:
(MVVM方式)如果更改是为了反映域模型中的内容,可能此更改最适合在viewmodel中处理
(控制方式)您是否考虑过在DependencyProperty中添加更改的处理程序?
container
答案 1 :(得分:0)
非常感谢你的回答Eric。
我最终在“KeyboardOutputService.Text”的Setter中添加了一行代码。但是,如果我要添加一个OnTextChanged事件处理程序,我会尝试你的方法。我可能会在以后遇到同样的问题,所以我会保持这个线程。
非常感谢。