窗口中的 WPF 用户控件 - 双击时依赖属性值为空

我在这里上传了我的示例项目:https : //www.file-upload.net/download-13252079/WpfApp1.zip.html 这是一个 WPF 窗口,其中包含多个相同的用户控件。UserControl 有一个名为“Text”的依赖属性,它绑定到 MainWindowViewModel 的属性并成功显示在 UserControl 的 TextBlock 中。但是,如果我双击 UserControl 并希望它提供其依赖属性的值,则该值为空。为什么是这样?非常感谢你的帮助!


编辑:抱歉,这里有一些源代码:UserControl 的 XAML:


<UserControl x:Class="WpfApp1.UserControl1"

         ...

         x:Name="UC1">    

    <StackPanel Orientation="Vertical">

        <TextBlock Margin="5" Text="Test" FontSize="20"></TextBlock>

        <TextBlock Margin="5" Text="{Binding ElementName=UC1, Path=Text}" FontSize="20"></TextBlock>

    </StackPanel>

</UserControl>

用户控件的代码:


public partial class UserControl1 : UserControl, INotifyPropertyChanged

{

    public UserControl1()

    {

        InitializeComponent();

    }



    string text;

    public string Text

    {

        get { return text; }

        set { SetProperty(ref text, value); }

    }

    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(

        "Text", typeof(string), typeof(UserControl1));





    public event PropertyChangedEventHandler PropertyChanged;


    protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] String propertyName = null)

    {

        if (Equals(storage, value))

        {

            return false;

        }


        storage = value;

        OnPropertyChanged(propertyName);

        return true;

    }


    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)

    {

        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

    }

}


当年话下
浏览 283回答 1
1回答

ABOUTYOU

下面是您的 UserControl 代码背后的样子。您不需要实现 INotifyPropertyChanged。有关所有详细信息,请参阅自定义依赖项属性。具体来说,您必须从属性包装器的 getter 和 setter 中调用GetValueand SetValue(没有其他任何内容)Text。public partial class UserControl1 : UserControl{&nbsp; &nbsp; public UserControl1()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; InitializeComponent();&nbsp; &nbsp; }&nbsp; &nbsp; public static readonly DependencyProperty TextProperty =&nbsp; &nbsp; &nbsp; &nbsp; DependencyProperty.Register(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nameof(Text), typeof(string), typeof(UserControl1));&nbsp; &nbsp; public string Text&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; get { return (string)GetValue(TextProperty); }&nbsp; &nbsp; &nbsp; &nbsp; set { SetValue(TextProperty, value); }&nbsp; &nbsp; }}对于在其自己的 XAML 中绑定到 UserControl 的 Text 属性,您可以使用RelativeSource而不是 ElementName 来保存无用的生成类成员:<UserControl x:Class="WpfApp1.UserControl1" ...>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; ...&nbsp; &nbsp; <TextBlock Text="{Binding Text,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RelativeSource={RelativeSource AncestorType=UserControl}}" .../>&nbsp; &nbsp; ...</UserControl>
打开App,查看更多内容
随时随地看视频慕课网APP