gpt4 book ai didi

C# MVVM 如何将命令添加到 TextBlock

转载 作者:行者123 更新时间:2023-12-03 10:56:42 28 4
gpt4 key购买 nike

我正在尝试将命令添加到我的 TextBlock但还没有任何成功。我试过以下:

在 XAML 中,我有一个 ItemsControl我在哪里添加我的TextBlocks :

<ItemsControl ItemsSource="{Binding CellCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Background="{Binding Path=CellBackgroundColor}">
<TextBlock.InputBindings>
<MouseBinding Command="{Binding TestCommand}" MouseAction="LeftClick"/>
</TextBlock.InputBindings>
</TextBlock>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Grid.Row="0" Rows="25" Columns="25">
</UniformGrid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>

如您所见,我尝试添加 MouseBinding就像你通常会做的那样,但因为我要添加 Textblocks通过我的 MainWindowViewModel它不工作。

MainWindowViewModel 代码:
public MainWindowViewModel()
{
TestCommand = new RelayCommand(Test);
CellCollection = new ObservableCollection<Cell>();

for (int iRow = 1; iRow < 26; iRow++)
{
for (int iColumn = 1; iColumn < 26; iColumn++)
{
CellCollection.Add(new Cell() { Row = iRow, Column = iColumn, IsAlive = false, CellBackgroundColor = new SolidColorBrush(Colors.Red) });
}
}
}

void Test(object parameter)
{
//...
}

我对 MVVM 很陌生,并且正在尝试学习该框架。我错过了什么?我想自从 ItemsSource设置为 CellCollection 它正在寻找 TestCommand在里面但是找不到?还是我错了?

最佳答案

尝试指定 RelativeSource对于绑定(bind):

<TextBlock Background="{Binding Path=CellBackgroundColor}">
<TextBlock.InputBindings>
<MouseBinding Command="{Binding DataContext.TestCommand,
RelativeSource={RelativeSource AncestorType=ItemsControl}}" MouseAction="LeftClick"/>
</TextBlock.InputBindings>
</TextBlock>
DataContextTextBlockItemTemplate是对应的 Cell对象而不是 MainWindowViewModel这就是为什么你不能直接绑定(bind)到 TestCommand属性(property)。

关于C# MVVM 如何将命令添加到 TextBlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51879288/

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