【发布时间】:2015-06-17 13:02:30
【问题描述】:
我正在尝试为用户控件做一个简单的 OneWay 绑定,但老实说,我不明白为什么某些部分不起作用。 简单起见,我创建了一个带有一些依赖属性的 WPF 标准 UserControl。 在我的主窗口中,我根据某些事件隐藏/显示 UserControl,并将属性绑定到我的主窗口视图模型数据。 但是,这样做不会使我的 UserControl 刷新某些部分。例如,我的 UserControl 上有一个 SearchString 依赖属性:
public static readonly DependencyProperty SearchStringProperty = DependencyProperty.Register("SearchString",
typeof(string), typeof(DisplayMailView), new UIPropertyMetadata(null));
public string SearchString
{
get { return (string)GetValue(SearchStringProperty); }
set
{
SetValue(SearchStringProperty, value);
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("SearchString"));
}
var loFinds = richEditControl1.Document.FindAll(SearchString, SearchOptions.WholeWord);
foreach (var find in loFinds)
{
var oDoc = find.BeginUpdateDocument();
var oChars = oDoc.BeginUpdateCharacters(find);
oChars.BackColor = System.Drawing.Color.Yellow;
oDoc.EndUpdateCharacters(oChars);
find.EndUpdateDocument(oDoc);
}
}
}
UserControl 中的这个绑定到我的主窗口视图模型的 SearchString 成员
<local:DisplayMailView SearchString="{Binding DataContext.SearchString, RelativeSource={RelativeSource AncestorType={x:Type Window}}, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True,NotifyOnTargetUpdated=True,Mode=TwoWay}"/>
在我的 ViewModel 上:
public string SearchString
{
get
{
return _searchString;
}
set
{
_searchString = value;
if (!string.IsNullOrWhiteSpace(value))
DataGridService.FocusFirstRow();
RaisePropertyChanged();
}
}
我在主窗口视图模型中的 SearchString 集合中设置了一个断点,该值已设置。但是,当我在 UserControl 上的 SearchString 集合中设置断点时,它永远不会触发?
另外,我的 UserControl 的 dataContext 已设置:
(this.Content as FrameworkElement).DataContext = this;
我确切地说我的 UserControl 构造函数在启动时只被调用一次,其他的东西必须根据用户操作动态刷新。
有人有想法吗?我在输出窗口中没有错误 谢谢
【问题讨论】:
标签: c# wpf mvvm data-binding user-controls