DataTemplateSelector并手动更新绑定

时间:2013-05-01 08:51:49

标签: wpf xaml wpf-controls

我正在使用DataTemplateSelector根据用户输入文本或选择日期值来交换用户的输入法。这意味着选择器在TextBox和DatePicker之间切换。每个控件都必须使用显式方式来更新绑定源。总而言之,用户可以选择日期或者他可以输入文本,一旦完成,他可以点击应用按钮来更新来源。虽然只使用按钮更新源而不是焦点丢失。

DataTemplateSelector的所有者控件是一个名为InputControl的自定义ContentControl,它更像是UserControl的一部分。

这是一小块伪代码,只是为了更好地可视化:

public class InputControl : ContentControl
{
  //// this method shall be executed once user clicks on apply button
  //// inside this method the source of binding shall be updated no matter what input method used chose
  public void Update()
  {
  }
}

Xaml看起来有点像这样:

<UserControl>
 <UserControl.Resources>
  <DataTemplate x:key="text">
    <TextBox Text="{Binding Mode=TwoWay, Path=., UpdateSourceTrigger=Explicit}"/>
  </DataTemplate>

  <DataTemplate x:key="date">
    <DatePicker DateValue="{Binding Mode=TwoWay, Path=., UpdateSourceTrigger=Explicit}"/>
  </DataTemplate>


  <MyDataTemplateSelector x:key="myDataTemplateSelector"
                        TextTemplate="{StaticResource text}"
                        DateTemplate="{StaticResource date}">
  </MyDataTemplateSelector>
 </UserControl.Resources>

 <Inputcontrol Content="{Binding Path=., Mode=TwoWay}" ContentTemplateSelector="{StaticResource myDataTemplateSelector}" />
</UserControl>

选择器看起来像这样

Public class MyDataTemplateSelector : DataTemplateSelector
{
  Public DataTemplate TextTemplate { get; set;}

  Public DataTemplate  DateTemplate { get; set;}

  Public DataTDemplate Select(.....)
  {
    ....
  }
}

现在的问题是,无论在模板中选择什么控件,我如何从InputControl更新绑定源?如果您阅读上面的注释InputControl.Update()方法,您将更好地理解我对用户更新源的意义,无论使用何种模板。

如果选择了TextBox,用户应该只能调用InputControl.Update(),它将更新文本框绑定源。如果它的DatePicker,用户应该能够做同样的事情,只能调用InputControl.Update()。源代码将得到更新,而Inputcontrol.Update()是触发更新过程的中心点,无论采用何种控件。

总结方法Update()非常重要,无论是TextBox还是DatePicker都会更新绑定源。

我该怎么做?

0 个答案:

没有答案