我想知道是否有办法以某种方式使 UserControls 更改并访问一个变量(在我的情况下是一个 int),如果它们像这样放置在树中。
我想要达到的目标
这两个控件的作用相同:显示游戏列表,如果单击,则转到相应的游戏。我想要一个场景,其中这 2 个控件共享一个从 0 到游戏计数的 int。如果它是 1 或更多 - GameCards 变得不可见,选定的游戏会在 RightBar 上发光。如果为 0 - 未选择任何内容,则游戏卡不会消失。
我尝试了什么
使用另一个 ViewModel 来存储一个 int 和对应的 UserControls 的 ViewModel。不起作用 - 我无法更改GameCards内可点击元素的 DataContext 。
因为我动态地创建了这个元素:
public class GameCardsViewModel : RPCUser
{
private AvaloniaList<GameCardModel> itemsList = new AvaloniaList<GameCardModel>();
public GameCardsViewModel() : base("getGames")
{
}
public override void GetMessage(object? sender, MessageEventArgs e)
{
var response = sh.rpc.Deserialize(e.Data) as List<object>;
foreach(var a in response)
{
Dispatcher.UIThread.InvokeAsync(new Action(AddItemToCollection));
}
}
private void AddItemToCollection()
{
itemsList.Add(new GameCardModel());
}
public AvaloniaList<GameCardModel> ItemsList
{
get => itemsList;
set => this.RaiseAndSetIfChanged(ref itemsList, value);
}
}
...
<ItemsRepeater Items="{Binding Path=GameCardsViewModel.ItemsList, Mode=TwoWay}" ...>
...
<ItemsRepeater.ItemTemplate>
<DataTemplate>
<views:GameCard/>
</DataTemplate>
</ItemsRepeater.ItemTemplate>
</ItemsRepeater>
...
在这里,RPCUser 是一个 ViewModelBase,它使用 WebSockets 从我的服务器获取任何必要的信息,而 GameCardModel 将包含将来解析的信息。
而且我需要更改此属性上的 DataContext 才能访问该变量。另一件事是我相信 ViewModel 不能包含静态元素,因为它们是作为每个 View 的实例创建的。
我对 WPF 世界比较陌生,任何帮助将不胜感激。