Проведя весь день в поисках ответа, я вынужден признать поражение и попросить о помощи.
Все, что мне нужно сделать, это привязать элемент заголовка в контекстном меню к свойству, но все, что я пробовал, не удалось.
В коде позади меня есть простое свойство, которое возвращает строку в зависимости от флага
Показано ниже
namespace myNamespace
{
public partial class MainWindow : System.Windows.Window
{
// Removed Init code for Clarity ......
public OptMenuText optMenuText = new OptMenuText();
public class OptMenuText
{
public bool menuState { get; set; }
public string menuHeader
{
get { if (menuState)
return "String One";
else
return "String Two";
}
}
}
Код XAMl имеет ListView, связанный с ObservableCollection, содержащим данные и различные DataTemplates для отображения, которые работают нормально. Я читал, что контекстное меню не является частью основного контекста данных приложения и поэтому требует, чтобы DataContext был указан в теге (надеюсь, у меня есть это право)
В ListView есть контекстное меню, как показано ниже.
<ListView Name="listView1" Margin="6" SelectionMode="Single"
ItemsSource="{Binding ElementName=This, Path=ConnectCollection}"
ItemTemplateSelector="{StaticResource templateSelector}" IsTextSearchEnabled="False" >
<ListView.ContextMenu>
<ContextMenu DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}" >
<MenuItem Header="{Binding menuHeader}" />
<Separator />
<MenuItem Header="Move Item Up" Click="MenuItemUp_Click" />
<MenuItem Header="Move Item Down" Click="MenuItemDown_Click"/>
</ContextMenu>
</ListView.ContextMenu>
</ListView>
Моя единственная проблема заключается в том, что я не могу привязать заголовок MenuItem к строковому свойству.
Сообщается об ошибке
Ошибка System.Windows.Data: 40: ошибка пути BindingExpression: свойство «menuHeader» не найдено в «объекте» «MainWindow» (Name = «This»)». BindingExpression:Path=menuHeader; DataItem='MainWindow' (Name='This'); целевой элемент — 'MenuItem' (Name=''); целевое свойство — «Заголовок» (тип «Объект»)
Может кто-нибудь, ПОЖАЛУЙСТА, показать мне, где я ошибаюсь.
Сара