首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从类内部或外部区分依赖属性的更改

如何从类内部或外部区分依赖属性的更改
EN

Stack Overflow用户
提问于 2020-03-29 16:27:25
回答 1查看 158关注 0票数 2

我正在创建一个WPF自定义控件。控件是一个时间选择器。它存在一个TextBox,其中包含一个字符串,表示用户输入的时间(如16:35)。当该TextBox被聚焦时,将打开一个Popup,其中包含两个独立的TextBoxes (小时)和分钟(以便于输入)。

弹出TextBoxes和主字段TextBox应该是同步的。我的意思是,当用户通过单击箭头键或键入“小时”字段来更改小时时,应该更新主文本框(包含文本16:35),反之亦然。弹出窗口中的字段仅限于接受0-9个字符。当主TextBox时间字符串更改时,将解析字符串,并更新弹出窗口中的两个字段。如果用户在主TextBox中键入无效的时间字符串,而控件无法从中提取时间和分钟来更新弹出的TextBoxes,那么我就什么也不做了。

弹出窗口中的箭头按钮绑定到命令。

我只使用自定义控件的类。我不附加任何DataContext,我只想使用依赖项属性。

我的控件具有多个依赖项属性,包含我的控件的用户视图应该使用以下依赖项属性:

TimeSpan

  • 时间

对于内部工作,我还有一些更多的依赖属性:

类型字符串的

  • Hour (与Popup)
  • Minute中的hour TextBox绑定,类型字符串的Popup)
  • TextBoxText中的分钟TextBox绑定(与主TextBox绑定)

)

我的问题的示例:

当用户更改任何字段时,总控制字段必须同步。因此,如果弹出窗口的hour字段中的文本发生变化,主字段的时间字符串就会发生变化。为此,我使用在依赖属性元数据中定义的依赖属性更改回调。但问题是,使用此回调,您不知道更改是否来自设置DP值的类本身的控件模板(直接来自用户的操作)。这会造成恶性循环,你很快就会失去概况。这并不是说我的程序崩溃了,而是像DP这样的问题被更新了两次,这种不想要的行为。

通过用户在其中键入一个时间字符串(12:45)调用

  1. TextBoxText,调用
  2. DP回调,因为TextBoxText DP更改了它的值,因此要解析
  3. 字符串中的TextBoxes,并将DP小时和分钟设置为新值。调用
  4. DP小时回调,并调用DP分钟回调。在这个小时和每分钟的DP回调中,
  5. 必须更新TextBoxText (请参见步骤2)。因为它不区分更改与“外部”(使用控件的视图用户)或“内部”(更改自己的DP‘s的控件类)。

如何解决这个问题?谁有这方面的经验,或者我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2020-03-29 19:03:11

我大部分时间都是这样处理的:

伪码:

代码语言:javascript
运行
复制
callback(){
   if(flag){
      it's coming from program
   }
   else{
      it's coming from user
   }
}

button_event_handler(){
   flag = true
   do_stuff()
   flag = false
}

但是,如果这不适用于您的代码,还有其他方法可以这样做。

例如,对于复杂的值(如日期时间的一部分),可以将实际的DateTime存储在通过转换器绑定到每个控件的属性中。它必须是内射的,否则整个事情就会变成一个循环。所谓内射,我指的是updown控件的每个状态必须只有一个textbox状态,反之亦然。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60917329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档