[英]Binding Property in command parameter (datagrid)
我有一個數據網格,列出了可觀察集合中存在的信息。 到目前為止,一切正常。
然后我想添加一個停止命令,其中 Name 屬性作為參數,但是當我寫 CommandParameter= {Binding Name} 時,我的按鈕被禁用。 我嘗試使用隨機字符串設置 CommandParameter 並且可以正常工作,因此問題來自綁定。
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{ Binding Name }"/>
<DataGridTextColumn Header="Source" Binding="{ Binding Source }"/>
<DataGridTextColumn Header="Target" Binding="{ Binding Target }"/>
<DataGridTemplateColumn Header="Stop">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Stop"
Command="{ Binding DataContext.StopCommand, RelativeSource = { RelativeSource FindAncestor,AncestorType={ x:Type DataGrid } } }"
CommandParameter="{ Binding Name }"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
謝謝 !
我認為這個問題出在您的代碼隱藏代碼中。 我為您創建了一個示例,在此示例中,我使用您的 XAML 代碼。
在此示例中,我使用的是Prism.WPF NuGet package。
XAML 代碼:
<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Source" Binding="{Binding Source}"/>
<DataGridTextColumn Header="Target" Binding="{Binding Target}"/>
<DataGridTemplateColumn Header="Stop">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Stop"
Command="{Binding DataContext.StopCommand, RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type DataGrid}}}"
CommandParameter="{Binding Name}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
代碼隱藏:
public partial class MainWindow : MetroWindow
{
public MainWindow()
{
InitializeComponent();
DataContext = new FooViewModel();
}
}
public class Foo
{
public string Name { get; set; }
}
public class FooViewModel : BindableBase
{
public FooViewModel()
{
for (int i = 0; i < 100; i++) Items.Add(new Foo() { Name = $"name_{i}" });
StopCommand = new DelegateCommand<string>(OnStopCommand);
}
public ICommand StopCommand { get; private set; }
public ObservableCollection<Foo> Items { get; set; } = new ObservableCollection<Foo>();
private void OnStopCommand(string name) => Console.WriteLine(name);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.