如何在WPF中绑定和刷新UserControl绑定?

我正在尝试为用户控件做一个简单的OneWay绑定,但是老实说,我不明白为什么某些部分无法正常工作。为简单起见,我创建了具有某些依赖项属性的WPF标准UserControl。在主窗口中,根据某些事件隐藏/显示UserControl,并将属性绑定到主窗口viewmodel数据。但是,这样做不会使我的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中的这一行绑定到我的主Window视图模型的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();
        }
    }

我在主窗口viewmodel的SearchString集合中设置了一个断点,该值已设置。但是,当我在UserControl的SearchString集合中设置断点时,它永远不会触发?

另外,我的UserControl的dataContext设置为:

    (this.Content as FrameworkElement).DataContext = this;

我精确地说,我的UserControl构造函数仅在启动时被调用一次,而其他内容则必须根据用户操作动态刷新。

有人有主意吗?我在输出窗口中没有错误,谢谢

阿尔穆洛

这是一个普遍的误解。当DependencyProperty的值更改时,set不会执行其CLR属性中的代码如果要在属性值更改时执行一些代码,则需要使用PropertyChanged回调。

您的UserControl代码应如下所示:

public static readonly DependencyProperty SearchStringProperty =
    DependencyProperty.Register(
        "SearchString",
        typeof(string),
        typeof(DisplayMailView),
        new UIPropertyMetadata(null, OnSearchStringChanged));
        // This sets OnSearchStringChanged as the PropertyChanged callback

public string SearchString
{
    get { return (string)GetValue(SearchStringProperty); }
    set
    {
        SetValue(SearchStringProperty, value);
        //  Any code you put here won't be executed 
        // when the DependencyProperty value changes
    }
}

private static void OnSearchStringChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    //  This part is not needed, DependencyProperties already
    // notify of their changes automatically
    //if (PropertyChanged != null)
    //{
    //    PropertyChanged(this, new PropertyChangedEventArgs("SearchString"));
    //}

    var control = sender as DisplayMailView;     

    var loFinds = control.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);
     }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

WPF绑定:如何在UserControl XAML中设置绑定源

来自分类Dev

WPF绑定:如何在UserControl XAML中设置绑定源

来自分类Dev

如何在 wpf UserControl 中参数化绑定?

来自分类Dev

如何在WPF中绑定

来自分类Dev

如何在WPF中绑定到UpdateSourceTrigger?

来自分类Dev

如何在WPF中设置数据绑定

来自分类Dev

不接受UserControl中的WPF多重绑定

来自分类Dev

在ListView数据模板WPF中绑定UserControl

来自分类Dev

不接受UserControl中的WPF多重绑定

来自分类Dev

如何在UserControl中绑定集合依赖项属性

来自分类Dev

如何在UserControl中绑定集合依赖项属性

来自分类Dev

如何在C#中刷新bindingnavigator绑定源?

来自分类Dev

从 UserControl 中的 Element 绑定

来自分类Dev

如何在点击时刷新绑定

来自分类Dev

来自UserControl的WPF数据绑定

来自分类Dev

WPF UserControl上的TwoWay绑定

来自分类Dev

如何在WPF C#中绑定到类本身

来自分类Dev

如何在WPF中绑定多种颜色以填充矩形?

来自分类Dev

如何在wpf datagrid中绑定行标题?

来自分类Dev

如何在WPF中绑定用作DataGridTemplateColumn的用户控件失败

来自分类Dev

如何在Visual Studio WPF中绑定“发布版本”属性

来自分类Dev

如何在WPF中创建可重用的TextBlock绑定?

来自分类Dev

WPF-如何在单独的xmal文件中绑定元素?

来自分类Dev

如何在MVVM模式wpf中绑定StrokeDashArray属性

来自分类Dev

如何在wpf datagrid中绑定行标题?

来自分类Dev

如何在WPF中将TabItem中的绑定与DataTemplate结合使用?

来自分类Dev

如何在WPF中创建与反斜杠键的键绑定?

来自分类Dev

如何在WPF中绑定用作DataGridTemplateColumn的用户控件失败

来自分类Dev

如何在Visual Studio WPF中绑定“发布版本”属性

Related 相关文章

热门标签

归档