嗨如何以編程方式將Button列添加到Datagrid。我想通過代碼隱藏文件中的代碼來完成此操作。WPF:將按鈕列添加到Datagrid
另外我想選擇性地啓用或禁用基於記錄的這個按鈕(如果狀態是打開的,那麼啓用它就會禁用此按鈕)。這裏Status是DataSource中的一列。
感謝, ABHI
嗨如何以編程方式將Button列添加到Datagrid。我想通過代碼隱藏文件中的代碼來完成此操作。WPF:將按鈕列添加到Datagrid
另外我想選擇性地啓用或禁用基於記錄的這個按鈕(如果狀態是打開的,那麼啓用它就會禁用此按鈕)。這裏Status是DataSource中的一列。
感謝, ABHI
通過VIKY聯答案總結了源添加按鈕欄的想法。我已經放了一個簡短的例子,它也顯示了你的問題的第二部分,這是如何基於網格中的數據啓用/禁用按鈕。我在4.0中使用了DataGrid,但使用3.5的工具箱也應該很好。
首先,我從XAML中添加一個Name列。這不是必需的,但僅僅表明您可以將XAML和C#添加到網格中。請注意,我在這裏命名網格,以便我有辦法在C#部分類中引用它。
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Data Grid Populated in XAML and C#">
<Grid>
<DataGrid x:Name="_gridControl" IsReadOnly="True" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Width="*" Binding="{Binding Name}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
現在,我在代碼背後做了兩件事。除了添加按鈕列和數據元素(具有名稱和狀態)外,我還創建了一個Converter類,如果值爲「Open」則返回true,否則返回false。然後,當設置綁定(而不是值)時,我還添加了我的轉換器,以便當ItemsControl爲我的項目生成並綁定容器時,顯示的按鈕的IsEnabled狀態鏈接到我的項目的狀態字段。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var buttonTemplate = new FrameworkElementFactory(typeof(Button));
buttonTemplate.SetBinding(Button.ContentProperty, new Binding("Name"));
buttonTemplate.SetBinding(Button.IsEnabledProperty, new Binding("Status")
{
Converter = new StatusToEnabledConverter()
});
buttonTemplate.AddHandler(
Button.ClickEvent,
new RoutedEventHandler((o, e) => MessageBox.Show("hi"))
);
this._gridControl.Columns.Add(
new DataGridTemplateColumn()
{
Header = "Close Button",
CellTemplate = new DataTemplate() { VisualTree = buttonTemplate }
}
);
this._gridControl.ItemsSource = new object[]
{
new { Name = "First Item", Status = "Open" },
new { Name = "Second Item", Status = "Open" },
new { Name = "Third Item", Status = "Closed" },
new { Name = "Fourth Item", Status = "Closed" },
new { Name = "Fifth Item", Status = "Open" }
};
}
}
public class StatusToEnabledConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture)
{
return "Open".Equals(value);
}
public object ConvertBack(object value, Type targetType, object parameter,
CultureInfo culture)
{
throw new System.NotImplementedException();
}
}
最後一個重要提示是我只在調用InitializeComponent後從C#修改DataGrid。對於具有XAML和C#部分的WPF內容控件,這很重要,因爲在開始修改XAML中定義的對象之前,需要完成通過XAML完成的對象構造。
希望這會有所幫助!
http://stackoverflow.com/questions/1754608/what-status-startup-and-dd-button-dynamically-in-datagrid-in-wpf – Peter 2009-11-18 10:54:32
試試這個:http://stackoverflow.com/questions/1754608/what-是代碼隱藏的數據網格模板列和如何使用它/ 1755556#1755556 – viky 2009-11-18 13:20:11