Я использую ListBox с DataTemplate
, как показано ниже (упрощенный xaml и имена переменных изменены).
<ListBox ItemsSource="{Binding Path=ObservCollectionItems}"
SelectedItem="{Binding Path=SelectedItemVar, Mode=TwoWay}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding SomeVar}" />
<Border>
<StackPanel>
<Button Content="String1"
Command="{Binding DataContext.Command1}
RelativeSource={RelativeSource FindAncestor, ListBox, 1}}" />
<Button Content="String2"
Command="{Binding DataContext.Command2}
RelativeSource={RelativeSource FindAncestor, ListBox, 1}}" />
</StackPanel>
</Border>
</StackPanel>
</DataTemplate>
<ListBox.ItemTemplate>
</ListBox>
Мне нужно обновить SelectedItemVar (свойство зависимостей), когда я нажимаю на один изкнопки.SelectedItemVar затем используется для команды соответствующей кнопки.SelectedItemVar обновляется, когда я нажимаю TextBlock
или Border
, но не когда я нажимаю любую кнопку.Я нашел не-MVVM решение этой проблемы здесь .Я не хочу добавлять код в файл для решения этой проблемы, как они сделали по ссылке.
Есть ли чистое решение, которое можно сделать в XAML.Помимо не-MVVM решений, я не нашел никого с этой проблемой.Я бы подумал, что это довольно распространено.
Наконец-то я нашел это Command="{Binding DataContext.CommandName} RelativeSource={RelativeSource FindAncestor, ListBox, 1}
для привязки команд.Я не до конца понимаю, что он делает, но я знаю, что команда не запускалась, когда я непосредственно связывался с CommandName
.