У меня есть пользовательская кнопка, настроенная внутри шаблона ListView ItemTemplate. ItemSource Listview привязан к коллекции элементов, довольно стандартно. У меня также есть несколько ярлыков в списке, и все отлично работает, кроме кнопки.
Привязка кнопки к одному из свойств вообще не будет работать с использованием {Binding buttonName}
, но она будет работать, если я использую {Binding Items/buttonName, ElementName=listView}
- единственная проблема, когда я делаю это таким образом, каждая кнопка в этот listView будет иметь точно такое же имя кнопки.
Теперь проблема связана с тем, что DataContext моей пользовательской кнопки имеет значение Self; к сожалению, это должно быть установлено в Self, потому что это требует пользовательский стиль, который я использую. Если я попытаюсь вместо этого изменить кнопку на UserControl (с кнопкой в качестве дочернего элемента и с установленным для нее DataContext), то по какой-то причине я не смогу использовать свойство Command кнопки.
Вот упрощенная версия моего ListView, использующего пользовательскую кнопку:
<ListView x:Name="listView" ItemsSource="{Binding MyPeopleData}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Label Content="{Binding PersonName}"/>
<ct:RevealButton Content="{Binding Items/recommendation, ElementName=listView}"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Как я сказал выше, это заставит каждый элемент в списке использовать одно и то же свойство recommendation
, а не свое собственное.
Если я попытаюсь использовать
<ct:RevealButton Content="{Binding recommendation}"/>
Это просто не будет работать, что имеет смысл, учитывая DataContext пользовательской кнопки, которая находится ниже:
<Button x:Class="RevealButton" Width="{Binding Width}" Height="{Binding Height}" Background="{Binding ButtonBackground}" DataContext="{Binding RelativeSource={RelativeSource Self}}" Style="{DynamicResource ButtonRevealStyleC}" mc:Ignorable="d">
<Button.ContentTemplate>
<DataTemplate>
<ContentPresenter Content="{TemplateBinding Content}" />
</DataTemplate>
</Button.ContentTemplate>
</Button>