【发布时间】:2016-01-29 13:32:18
【问题描述】:
我的解决方案中有三个项目:
- 我的主 WPF 应用程序包含一个 MainWindow + MainViewModel
- 带有 UserControl 的 UserControl 库 (ConfigEditorView)
- 带有用于 UserControl 的 ViewModel 的 UIProcess 类 (ConfigEditorViewModel)
在我的 MainWindow 中,我想将 UserControl 与 UIProcess 的 ViewModel 一起使用。
首先我在我的 MainWindow 中设置 UserControl:
<TabItem Header="Editor">
<Grid>
<cel:ConfigEditorView DataContext="{Binding ConfEditModel, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</TabItem>
我不知道这里需要哪些属性,所以我把所有的放在一起,但它仍然不起作用。
然后我在我的 MainViewModel 中设置了这个:
public ConfigEditorViewModel ConfEditModel { get; set; }
使用绑定到按钮的简单方法:
private void doSomething()
{
ConfEditModel = new ConfigEditorViewModel("Hello World");
}
我的 ConfigEditorViewModel 基本上是这样的:
public class ConfigEditorViewModel : ViewModelBase
{
private string _Description;
public string Description
{
get
{
return _Description;
}
set
{
_Description = value;
base.RaisePropertyChanged();
}
}
public ConfigEditorViewModel(string t)
{
Description = t;
}
}
描述绑定到我的用户控件中的文本框。
<TextBox Grid.Row="1" Grid.Column="1" Margin="0,0,0,10" Text="{Binding Description}"/>
当我启动应用程序并单击按钮时,文本框应该包含“Hello World”,但它是空的。
我做错了什么?
【问题讨论】:
-
您的 ConfEditModel 不会通知 UI 更改,因此您的 cel:ConfigEditorView 的 DataContext 不会更新
-
谢谢@nkoniishvt 我在编码时没有考虑到这一点,但现在它可以正常工作了。
标签: c# wpf mvvm user-controls datacontext