- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在制作一个 WPF 应用程序,我有一个用于数据编辑的 UserControl,里面还有几个 UserControl( super 简化版):
<UserControl x:Name="ParentControlView">
<DockPanel>
<!-- other various controls, textblocks, etc. -->
<Controls:DatePickerView DataContext="{Binding Path=EndDate, Mode=TwoWay}" />
<!-- other various controls, textblocks, etc. -->
</DockPanel>
</UserControl>
在父控件的 ViewModel 中,它有一个名为 EndDate
的子 DatePickerViewModel
绑定(bind)到 DatePickerView
控件:
public class ParentControlViewModel : ViewModelBase
{
private DatePickerViewModel _endDate;
public DatePickerViewModel EndDate
{
get { return _endDate; }
set
{
_endDate = value;
RaisePropertyChanged(() => EndDate);
RaisePropertyChanged(() => SomeProperty);
}
}
}
DatePickerView
控件是一些组合框,它们绑定(bind)到 DatePickerViewModel
中的属性,没什么特别的。
当我运行我的应用程序时,DatePickerView
被正确初始化并设置为当前值,就像它应该的那样。 所以 get
方法工作正常。但是当我更改 DatePickerView
上的控件并且它的 ViewModel 得到更新时,绑定(bind)到父级的值 View 未在父 View 模型中设置(即 set
方法从不运行)。
显然,我遗漏了某种数据绑定(bind)连接,但我终究无法弄清楚那是什么,而且我到处搜索,但一无所获。
Minimal working sample .包括我正在使用的大部分专有日期类,可能还有一些糟糕的 MVVM 实现。我还是 MVVM 的新手。我去掉了很多不必要的代码,所以日期选择器不能正常工作,但它做了它需要为这个问题做的事情。
您需要获取并引用 MvvmFoundation.Wpf.dll
( at codeplex )。
最佳答案
唯一有意义的事情(仅基于显示的代码)是 (1) ViewModelBase 没有实现 INotifyPropertyChanged 或 (2) 您的 DatePickerView 控件在依赖属性方面做错了。
我建议发布完整的重现,包括 DataPickerView 和 ViewModelBase。
编辑
好的,看了一下,发现问题了。你的 setter 永远不会被调用的原因是你的 EndDate (DatePickerViewModel) 永远不会改变。这听起来有些不言自明,但这是底线——没有代码可以完全替换 EndDate 属性,这将导致 setter 代码运行。
您的下拉列表会更改 EndDate/DatePickerViewModel 的属性,但请记住,更改其属性(Date、SelectedYear 等)不会设置实例 DatePickerViewModel,这意味着 setter 代码将不会运行。
因为这是一个精简版,我有点猜测你最终想要实现什么,但我认为你想要的是在 DatePickerViewModel(可能是 DateTime 类型)上创建一个 DependencyProperty,它可以绑定(bind)到并且可以在控件内的日期更改时发出通知。
作为一种快速的解决方法,添加下面的代码来触发 setter 代码。请注意,这不是推荐的解决方案——它会导致您的 parent 和 child 相互引用,这(至少)很奇怪:
//in ParentControlViewModel, change your EndDate to:
public DatePickerViewModel EndDate
{
get { return _endDate; }
set
{
_endDate = value;
if (_endDate.ParentControlViewModel == null)
{
_endDate.ParentControlViewModel = this;
}
RaisePropertyChanged(() => EndDate);
}
}
//Add to DatePickerViewModel
public ParentControlViewModel ParentControlViewModel { get; set; }
//Change Date property in DatePickerViewModel to:
public GDate Date
{
get { return _date; }
set
{
_date = value;
RaisePropertyChanged(() => Date);
if (ParentControlViewModel != null)
{
ParentControlViewModel.EndDate = this;
}
}
}
关于c# - MVVM UserControl 绑定(bind)没有被推回到父控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7617883/
您好,我的 WPF UserControl 知识只有一个小时了。因此,如果有很多关于这个问题的教程或/和答案,请原谅我(老实说,我认为这无法完成,需要重新编写代码……因此我想问的原因) 因此,在创建
我看过几篇文章介绍如何删除在运行时添加的 UserControl,但我的问题有点不同。我有一个 UserControl,它由一个图像组成,右上角有一个小“x”按钮,用于从其父 Canvas 中删除自身
我有一个用户控件 UserControl1,它在其资源中定义了一种样式。该用户控件包含一个 UserControl2 实例,它引用了该样式:
我正在尝试以 How can a WPF UserControl inherit a WPF UserControl? 中提到的方式继承 WPF 中的用户控件 namespace DMS.Presen
我想创建几个具有一些通用功能的 WPF UserControl 类。出于这个原因,我想从一个新的基类派生类,而这个基类又派生自 UserControl。 我的问题是我的 C# 类是 部分 定义的,而自
这个问题在这里已经有了答案: Should a user control have its own view model? (6 个答案) How to correctly bind to a de
我有一个 UserControl,它包含另一个带有 Button 的 UserControl。我想在第一个 UserControl(父级)中向该按钮添加一个事件。我尝试这样做: void Page_I
我需要我所有的用户控件都具有一些类似的功能。所以我的用户控件是: using System.Windows.Controls; namespace WpfApplication26 { ///
以下 WPF UserControl 调用了 DataTypeWholeNumber,它有效。 现在我想创建一个名为 DataTypeDateTime 和 DataTypeEmail 等的 UserC
我有一个包含按钮和其他一些控件的 UserControl: ... 当我创建该控件的新实例时,我想获取 Button 的 Command 属性: 当然,“Th
我不确定这个问题是否已经发布,并且我已经检查了建议的 SO 链接,但似乎没有一个链接与该问题完全相关。因此,如果有人认为这可能是重复的,请发布建议答案的链接并原谅这篇文章。 解决我的问题的方法可能不止
我在 UserControl_1 中有两个 UserControl,有一个按钮可以在 MainWindow.axml 中的 StackPanel 中添加 UserControl_2。我在 UserCo
我正在开发一个由多个传感器组成的模块化项目,每个传感器都继承自一个抽象的 Sensor 类。为了配置每个传感器,我已经开始为每个传感器添加一个用户控制面板(继承自 UserControl),它在运行时
我正在使用 c#.net 我的网络表单中有不同的 View ,除了三个文本框(到达/看到/离开时间)之外,这些通常都显示不同的信息。为了尝试减少代码,我创建了一个包含这三个文本框的 UserContr
我有一个 UserControl,它有两个组件 public System.Windows.Forms.ComboBox innerComboBox; public System.Windows.Fo
我有一个包含 ListBox 的 userControl。我想从另一个 userControl 访问那个 ListBox。 例如: UserControl1.ListBox1.Items.Count;
我在更新另一个用户控件中的用户控件时遇到问题。 示例代码: UserControl MyCart1 = (UserControl)Page.FindControl("MyCart1"); Update
我在下面添加了一些屏幕截图和重现步骤。 我的数据模型有一个基类,我们称它为 CommonThing,它有很多属性。然后有几个具有附加属性的此类的特殊版本。我现在想创建一个 UI 来将数据输入到这个模型
我有一个应用程序,我需要确保在使用 ShowDialog() 单击用户控件上的按钮打开的表单将在我处理用户控件时关闭和处理。 我通过计时器在主窗体中调用 userControl.Dispose()。
我正在努力实现... 用户控件(MyRepeater) Control Start Control End 页面 Page Start Page Item Tem
我是一名优秀的程序员,十分优秀!