我正在尝试为用户控件做一个简单的OneWay绑定,但我真的不明白为什么有些部件不工作。为了简单起见,我创建了一个具有一些依赖项属性的WPF标准UserControl。 在我的主窗口中,根据某些事件隐藏/显示UserControl,并将属性绑定到我的主窗口viewmodel数据。 但是,这样做不会让我的UserControl刷新某些部分。对于为例,我有一个搜索依赖属性上我的用户:如何绑定和刷新WPF中的UserControl绑定?
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);
}
}
}
这一个在用户控件绑定到我的主窗口视图模型
<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();
}
}
我在我的主窗口viewmodel的一个我的搜索字符串放置一个断点,值被设置。然而,当我把一个断点放到UserControl的SearchString的集合中时,它永远不会触发?
而且,我的用户的DataContext设置:
(this.Content as FrameworkElement).DataContext = this;
我精确,以至于我的用户构造函数只调用在启动一次,其他的事情必须是动态地根据用户的操作刷新。
有人有想法吗?我在输出窗口中没有错误 谢谢
感谢您给我们! – cdie
不客气! – almulo