gpt4 book ai didi

c# - (ViewModel)DataContext 返回 null

转载 作者:行者123 更新时间:2023-11-30 16:50:12 25 4
gpt4 key购买 nike

我有以下事件:

private void PlaceToken(object sender, RoutedEventArgs e)
{
ConnectFourViewModel currentViewModel = (ConnectFourViewModel)DataContext;

Button button = (Button)sender;

int currentColumn = Convert.ToInt32(button.Content);

int currentPlayer = currentViewModel.Board.CurrentPlayer;
currentViewModel.Board.PlaceToken(currentColumn, currentPlayer);
}

经过以下设置:

public MainWindow()
{
var window = new Window();
var grid = new Grid {};
ConnectFourViewModel ViewModel = new ConnectFourViewModel();

//Set up rows and cols
for(int i = 1; i<=7; i++)
{
var col = new ColumnDefinition();
grid.ColumnDefinitions.Add(col);
}
for (int i = 1; i <= 7; i++)
{
var row = new RowDefinition();
grid.RowDefinitions.Add(row);
}

//Set up tiles
foreach (var item in ViewModel.Board.AllTiles)
{
int index = ViewModel.Board.AllTiles.IndexOf(item);

string name =
"Col" +
Convert.ToString(item.Column) +
"_Row" +
Convert.ToString(item.Row);

Label currentTile = new Label{ Name = name};
Grid.SetRow(currentTile, item.Row - 1);
Grid.SetColumn(currentTile, item.Column -1);

//Bind
var binding = new Binding();
binding.Source = ViewModel.Board.AllTiles[index];
binding.Path = new PropertyPath("Contents");

currentTile.SetBinding(ContentProperty, binding);

//Add
grid.Children.Add(currentTile);
}

//Set up Buttons
for (int i = 1; i <= 7; i++)
{
Button currentButton = new Button { };

//binding
var binding = new Binding();
binding.Source = ViewModel.CurrentColumn;

currentButton.SetBinding(ContentProperty, binding);

//Set Column names, this has to be after the binding has been set.
currentButton.Content = i;
//events
currentButton.Click += new RoutedEventHandler(PlaceToken);

//add
Grid.SetColumn(currentButton, i - 1);
Grid.SetRow(currentButton, 7);
grid.Children.Add(currentButton);
}

window.Content = grid;
window.DataContext = ViewModel;
window.Show();
InitializeComponent();
}

我期待着行 ConnectFourViewModel currentViewModel = (ConnectFourViewModel)DataContext;设置 currentViewModel 以反射(reflect)我的 UI 正在运行的信息。不幸的是,它返回 null,我不确定为什么。

这显然突出了我对该主题理解上的差距,但不确定如何解决它,我可以帮忙。知道我哪里出错了吗?

最佳答案

您还没有在任何地方将 DataContext 分配给 ViewModel。假设您希望 ViewModel 成为 MainWindow 的 ViewModel,我建议您在 Initialize Component 之前分配它,如下所示。因为它从未被分配,所以你得到的是空值。

public MainWindow()
{
ConnectFourViewModel ViewModel = new ConnectFourViewModel();
. . .
. . .
DataContext = ViewModel ;
InitializeComponent();
}

关于c# - (ViewModel)DataContext 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35392793/

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