Здравствуйте. То ли у меня глаз замылился то ли что … не врублюсь почему я не вижу изменений в контроле?
Прописал свойство:
public partial class ControlBlock : UserControl, INotifyPropertyChanged
{
public static readonly DependencyProperty BlockTitleProperty = DependencyProperty.Register("BlockTitle", typeof(string), typeof(ControlBlock), new FrameworkPropertyMetadata("Title"));
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string name = null)
{
var handler = this.PropertyChanged;
handler?.Invoke(this, new PropertyChangedEventArgs(name));
}
public string BlockTitle
{
get
{
return (string)this.GetValue(BlockTitleProperty);
}
set
{
this.SetValue(BlockTitleProperty, value);
OnPropertyChanged("BlockTitle");
}
}
public ControlBlock()
{
InitializeComponent();
}
private void OnButtonsClick(object sender, RoutedEventArgs e)
{
}
}
В коде контрола пытаюсь связать
<TextBlock Text="{Binding BlockTitle}" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center" FontFamily="Verdana" FontWeight="Bold" FontSize="20"/>
Но в design режиме не вижу никаких изменений. Что тут может быть не так то??
AlexP
(Alex P.)
31.Октябрь.2020 16:23:13
#2
А не в design работает?
INotifyPropertyChanged
вроде не нужен тут, это надо тем, что будут биндиться к нему.
public static readonly DependencyProperty IsSpinningProperty =
DependencyProperty.Register(
"IsSpinning", typeof(Boolean),
typeof(MyCode)
);
public bool IsSpinning
{
get { return (bool)GetValue(IsSpinningProperty); }
set { SetValue(IsSpinningProperty, value); }
}
AlexP:
IsSpinning
Ну ведь у меня также и сделано, но все равно не вижу в дезайне текста в этом поле.
AlexP
(Alex P.)
01.Ноябрь.2020 09:36:54
#4
Так а не в design видно?
Не видно где, в окне, где этот UserControl добавлен?
Там значение как задано? Если биндинг к какому-то свойству, то может ему и не присвоено ничего в конструкторе и т.п.?
Вот так переделал:
<TextBlock Text="{Binding BlockTimeText, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:ControlBlock}}" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="70"/>
В runtime видно и все меняется а в дезайне пустое окно… и в интернете ничего толкового нету.
И DataContext = this; в конструкторе прописал … (((
Так ведь в параметрах свойства есть дефолтное значение же.
public static readonly DependencyProperty BlockTimeTextProperty = DependencyProperty.Register("BlockTimeText", typeof(string), typeof(ControlBlock), new FrameworkPropertyMetadata("00:00"));
Нашел вот метод FallbackValue=00:00. Вроде показывает в дезайне… типа как константа.
AlexP
(Alex P.)
01.Ноябрь.2020 13:26:27
#6
Тут советуют добавить FrameworkPropertyMetadataOptions.AffectsRender
и перезапустить VS.
Но мне что-то не помогло.
В основном окне, где контрол добавлен — показывает (без AffectsRender тоже). В самом контроле нет.
WorldMaster:
{Binding BlockTitle}
Чтобы так работало надо DataContext установить.
DataContext = this;
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DataContext="{Binding RelativeSource={RelativeSource Self}}"
(или тут может быть можно сразу только в XAML без d:
)