2016-12-29 5 views
0

Я создал usercontrol, но я не могу заставить работать с привязкой, я пытался разными способами, но я не получил его работать, значение не отображается.Проблема с привязкой в ​​пользовательском элементе управления

ShowPrice.cs

public static readonly DependencyProperty ValueProperty = 
      DependencyProperty.Register("Value", typeof(string), typeof(ShowPrice), 
       new FrameworkPropertyMetadata 
       (
        string.Empty, 
        FrameworkPropertyMetadataOptions.Journal | 
        FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, 
        OnValuePropertyChanged 
       )); 

    public string Value 
    { 
     get { return (string)GetValue(ValueProperty); } 
     set { SetValue(ValueProperty, value); } 
    } 

    private static void OnValuePropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) 
    { 
     var showPrice = obj as ShowPrice; 
     showPrice?.SetValue(ValueProperty, (string)e.NewValue); 
    } 

ShowPrice.xaml

<UserControl x:Class="WPF.CustomControls.UserControls.ShowPrice" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     DataContext="{Binding RelativeSource={RelativeSource Self}}"> 

     <TextBlock Text="{Binding Value}" 
        HorizontalAlignment="Center" 
        Foreground="White" 
        FontSize="40" 
        Margin="5" /> 

</UserControl> 

Мой view.xaml

<userControls:ShowPrice Value="{Binding MyViewModelProperty, StringFormat=C2, ConverterCulture='es-AR'}"> 
</userControls:ShowPrice> 

Если я предписанием е значение, если она работает

<userControls:ShowPrice Value="Test"/> 
+0

Похоже, ваша проблема в том, что модель просмотра не привязана к вашему представлению, потому что она не находит MyViewModelproperty. Как вы говорите, если вы установите «Значение» явно, это работает, поэтому проблема не в ShowPrice.xaml. –

+1

Также вам не нужна строка «showPrice? .SetValue (ValueProperty, (строка) e.NewValue); Это избыточность средства определения ценности. –

ответ

1

Не связывайте DataContext к Self. Используйте RelativeSource связывания вместо (но это не проблема):

Text="{Binding Value, RelativeSource={RelativeSource AncestorType=UserControl}}" 

Кроме того, избавиться от OnValuePropertyChanged обработчика. Он вызывается, когда установлен Value, поэтому вряд ли нужно снова установить Value (но это тоже не проблема).

Наконец, это может быть ваша проблема:

Foreground="White" 

ли эта вещь используется на белом фоне? Я держал весь код в точности, как у вас, и сделал одно изменение:

<TextBlock 
    Text="{Binding Value}" 
    Background="YellowGreen" 
    HorizontalAlignment="Center" 
    Foreground="White" 
    FontSize="40" 
    Margin="5" 
    /> 

Это:

Background="YellowGreen" 

И я увидел белый текст на желто-зеленом фоне.

+0

Спасибо, например, мой код больше, есть граница с цветным фоном, я просто поместил эту часть кода, просто часть ошибки. Проблема была решена путем удаления Self DataContext – avechuche

Смежные вопросы