Hallo и благодарю вас за ваше время.Сопоставление данных, частично работающее с пользовательской зависимостью в UserControl
У меня есть своеобразная проблема. Я создал usercontol, который имеет некоторые пользовательские свойства зависимостей.
Если я реализую usercontrol и привязываюсь к статическому тексту. Все работает нормально.
Однако, если я попытаюсь установить его для значения свойств выбранных объектов. Это не работает.
Это ошибка, я получаю в окне вывода:
Error: BindingExpression path error: 'SelectedUseCase' property not found on 'Helper.UserControls.UseCasePropertyDisplay'. BindingExpression: Path='SelectedUseCase.Name' DataItem='Helper.UserControls.UseCasePropertyDisplay'; target element is 'Helper.UserControls.UseCasePropertyDisplay' (Name='null'); target property is 'Text' (type 'String')
UserControl:
https://github.com/Toudahl/SoftwareDesignHelper/blob/master/Helper/UserControls/DisplayAndEditControl.xaml
<UserControl
x:Class="Helper.UserControls.UseCasePropertyDisplay"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Helper.UserControls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<StackPanel Orientation="Horizontal"
Margin="260,0,0,0">
<TextBlock Text="{Binding Label}"
Style="{StaticResource UseCaseTextBlock}"
x:Name="textblock_label"/>
<TextBlock x:Name="textblock_propertyContent"
Text="{Binding Text}"
Style="{StaticResource UseCaseFrameWorkTextElement}"
DoubleTapped="textblock_DoubleTapped" />
<TextBox x:Name="textbox_propertyContent"
Text="{Binding Text}"
Visibility="Collapsed"
Style="{StaticResource UseCaseTextBox}"
LostFocus="textbox_LostFocus" />
</StackPanel>
</UserControl>
Decleration свойств зависимостей в коде:
https://github.com/Toudahl/SoftwareDesignHelper/blob/master/Helper/UserControls/DisplayAndEditControl.xaml.cs
public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
"Text",
typeof(string),
typeof(UseCasePropertyDisplay),
new PropertyMetadata(null));
public static readonly DependencyProperty LabelProperty = DependencyProperty.Register(
"Label",
typeof(string),
typeof(UseCasePropertyDisplay),
new PropertyMetadata(null));
public string Text
{
get { return (string)GetValue(TextProperty); }
set {SetValue(TextProperty, value);}
}
public string Label
{
get { return (string)GetValue(LabelProperty); }
set { SetValue(LabelProperty, value);}
}
Это, как я реализовать его в виде:
https://github.com/Toudahl/SoftwareDesignHelper/blob/master/Helper/ViewsAndViewModels/ViewUseCases.xaml
<uc:UseCasePropertyDisplay Label="Name" Text="{Binding SelectedUseCase.Name, Mode=TwoWay}" />
От чтения очень похожие вопросы здесь, им угадать, что у него есть что-то делать с тем, как я установить контекст. Однако решение, которое было предоставлено людям (установка относительного источника для предка), не работает для меня. Поскольку он недоступен на моей платформе. Я не совсем уверен, куда идти отсюда, так как это первый раз, когда я пытаюсь использовать usercontrols, и в первый раз я использую свойства зависимостей. Школа не начинается до нескольких недель, поэтому я не могу удержать своего учителя за это.
Спасибо. Это сработало :) Не могли бы вы объяснить мне, почему? Мне кажется, это похоже на настройку источника родственников. И если у вас есть ссылка на документацию или учебник msdn/howto, я был бы признателен. Я не смог найти ничего, кроме документации для класса родственников. –
, если вы настроите DataContext на себя, экземпляр вашего класса UserControl будет DataContext. У вас нет возможности обращаться к свойствам из внешнего ViewModel, который вы используете. Без установки DataContext в UserControl он будет использовать родительский, который вы хотите. См. Ответ от pdross [http://stackoverflow.com/questions/5077377/usercontrols-datacontext](http://stackoverflow.com/questions/5077377/usercontrols-datacontext) для получения дополнительной информации. – Juergen