0

我想知道是否有办法以某种方式使 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 世界比较陌生,任何帮助将不胜感激。

4

0 回答 0