gpt4 book ai didi

c# - MVVM 列表框数据模板 SelectedItem

转载 作者:行者123 更新时间:2023-12-02 05:03:44 25 4
gpt4 key购买 nike

我正在使用带有 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 然后用于相应按钮的命令。当我单击 TextBlockBorder 时,SelectedItemVar 会更新,但当我单击任一按钮时不会更新。我找到了解决这个问题的非MVVM解决方案here 。我不想在文件后面添加代码来解决这个问题,就像他们在链接中所做的那样。

是否有一个干净的解决方案可以在 XAML 中完成。除了非 MVVM 解决方案之外,我还没有发现任何人遇到此问题。我本以为这很常见。

最后,我找到了用于命令绑定(bind)的 Command="{Binding DataContext.CommandName}relativeSource={RelativeSource FindAncestor, ListBox, 1}。我不完全明白它在做什么,但是我确实知道当我直接绑定(bind)到 CommandName 时该命令没有触发。

最佳答案

您正在使用 MVVM ....所以非常简单的解决方案是将 SelectedItem 作为参数传递给 Both 按钮的命令,然后使用参数的值设置 SelectedItem.....

代码

public class YourViewmodel
{
//Other Variables


public YourViewModelCtor()
{
Command1= new RelayCommand(Command1Func);
}

Public SelectedVar
{
get {return value;}
Set { selectedVar=value;
OnPropertyChanged("SelectedVar");
}
}

//Other Properties


void Command1Func(object obj)
{
SelectedVar= obj as <Your Desired Type>;

//Do your thing with SelectedVar ... Do the same for Command2
}
}

Xaml 中需要的更改

<StackPanel>
<Button Command="{Binding DataContext.Command1}" CommandParameter="{Binding}"
Content="String1" />
<Button Command="{Binding DataContext.Command2}" CommandParameter="{Binding}"
Content="String2" />
</StackPanel>

这将为您提供单击按钮时的当前列表框项目......

这应该可以......:)

关于c# - MVVM 列表框数据模板 SelectedItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8264089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com