Мое приложение имеет MainWindow. Внутри этого есть 1 элемент управления, ListBox
, привязанный к свойству MainWindowViewModel. Это свойство является UserControl, типа CriteriaVmКак передать «привязанное» значение к свойству зависимостей
CriteriaVm имеет одну строку свойство называется MyString
В Критериями Просмотр У меня есть следующий код
<UserControl x:Class="CompoundInterests.View.CriteriaView"
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:vm="clr-namespace:CompoundInterests.ViewModel"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="600">
<UserControl.Resources>
<ResourceDictionary Source="../Dictionary.xaml" />
</UserControl.Resources>
<Grid>
<Border>
<Expander Header="{Binding MyString}" >
<vm:PropertiesVm ThresholdName="{Binding MyString}" />
</Expander>
</Border>
</Grid>
</UserControl>
Как вы можете видеть, я связывании MyString в 2-х местах. Связывание в Expander отлично работает, то есть в vm: PropertiesVm не используется (который использует Dependency Properites). Следующая ошибка показывает в окне Output
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=MyString; DataItem=null; target element is 'PropertiesVm' (HashCode=5991653); target property is 'ThresholdName' (type 'String')
ОК сообщение об ошибке говорит мне, что ищет MyString в ProperitesVm ... Я должен искать MyString в CriteriaVm. Это означает, что мне нужно использовать RelativeSource, который, как мне кажется, выше 1 уровня и типа UserControl. Так что я обновлена:
<vm:PropertiesVm ThresholdName="{Binding Path=MyString, RelativeSource={RelativeSource AncestorLevel=1,AncestorType=UserControl,Mode=FindAncestor}}" />
Я получаю немного другой вопрос, но это выглядит как если та же основная неисправность
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.UserControl', AncestorLevel='1''. BindingExpression:Path=MyString; DataItem=null; target element is 'PropertiesVm' (HashCode=24649639); target property is 'ThresholdName' (type 'String')
На данный момент PropertiesVm имеет только свойство зависимостей, то PropertiesView просто пустую сетку. Это значит, что я могу сначала обработать эту ошибку и беспокоиться о следующем этапе привязки позже.
Я не понимаю, почему я получаю сообщение об ошибке или что я делаю неправильно. Я могу с радостью предоставить больше кода, если это необходимо. Проект на этом этапе очень рано, как таковой, минимальный код.
1.Add [BindableAttribute (истина)] атрибут ThresholdName свойства –