使用属性更改简单绑定到用户控件在 vs 扩展工具窗口中不起作用
Posted
技术标签:
【中文标题】使用属性更改简单绑定到用户控件在 vs 扩展工具窗口中不起作用【英文标题】:Simple binding to a user control using property change not works in vs extension tool window 【发布时间】:2021-11-26 17:25:21 【问题描述】:我在 Vs 扩展中有一个 UserControl, 我想做一个属性绑定,但由于某种原因它不起作用
xaml
<UserControl x:Class="RemoteDebuggerToolBarExtension.Windows.CommandRunnerControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:vsshell="clr-namespace:Microsoft.VisualStudio.Shell;assembly=Microsoft.VisualStudio.Shell.15.0"
xmlns:windows="clr-namespace:RemoteDebuggerToolBarExtension.Windows"
Background="DynamicResource x:Static vsshell:VsBrushes.WindowKey"
Foreground="DynamicResource x:Static vsshell:VsBrushes.WindowTextKey"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
d:DataContext="d:DesignInstance windows:CommandRunnerControl"
Name="MyToolWindow">
<Grid>
<StackPanel Orientation="Vertical">
<TextBlock Margin="10" >Type your command here:</TextBlock>
<TextBox Margin="10" Width="200" TextWrapping="WrapWithOverflow" Text="Binding CommandData,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged "></TextBox>
<Button Margin="10" Content="Run" Click="RunRemoteCommand" Name="button1" />
</StackPanel>
</Grid>
后面的代码
namespace RemoteDebuggerToolBarExtension.Windows
public partial class CommandRunnerControl : UserControl, INotifyPropertyChanged
private string _commandData = string.Empty;
public event PropertyChangedEventHandler PropertyChanged;
public string CommandData
get => _commandData;
set
_commandData = value;
OnPropertyChanged(nameof(CommandData));
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
在没有更新的情况下输入文本 我错过了什么?
【问题讨论】:
【参考方案1】:设置DataContext
或明确指定绑定源:
<TextBox Margin="10" Width="200" TextWrapping="WrapWithOverflow"
Text="Binding CommandData,UpdateSourceTrigger=PropertyChanged,
RelativeSource=RelativeSource AncestorType=UserControl " />
【讨论】:
谢谢解决了,你是什么意思改变DataContext?你能解释一下上面的定义有什么问题吗? 您尚未在示例代码中的任何位置设置DataContext
。
不是 d:DataContext="d:DesignInstance windows:CommandRunnerControl" 定义它
没有。它定义了 design 时间DataContext
,仅供 Visual Studio 中的设计器使用。它不适用于运行时。以上是关于使用属性更改简单绑定到用户控件在 vs 扩展工具窗口中不起作用的主要内容,如果未能解决你的问题,请参考以下文章