2012-02-26 46 views
0

我有我的自定義類型的對象數組。我有一個與這些對象相關的按鈕數組。我想通過點擊他的按鈕來更改任何對象。所以按鈕必須「知道」他們的對象。對象必須「知道」他們的按鈕。如何將它們彼此綁定(一個對象只與一個按鈕綁定,反之亦然)?如何綁定自定義類型的對象和控件?

此外,它必須在C#代碼中,而不是XAML,因爲我將以這種方式構造這些數組。

例子。有與它Cell對象地圖對象(VM意味着視圖模型):

public class MapCellVM 
{ 
    public bool IsPassable { get; set; } 
} 

public class MapVM 
{ 
    public MapCellVM[,] CellMap { get; set; } 
} 

每個單元必須作爲一個按鈕。因此,用戶只需點擊特定按鈕即可更改任何單元對象的IsPassable屬性。

+0

請提供一個代碼示例和更多關於迄今爲止嘗試過的信息。 – Xcalibur37 2012-02-26 16:26:16

回答

0

我不知道你到底是怎麼意識到你的問題的,所以我可以給你一個例子,我將如何設計它。正如你想顯示一個自定義對象列表,我會使用ItemsControl來顯示它們和一個命令,每個自定義對象由XAML觸發。這仍然會讓你有機會處理代碼中的所有事情。下面是一個示例:

自定義對象

public class CustomObject 
{ 
    public ICommand DoSomethingCommand { get; private set; } 

    public CustomObject() 
    { 
     DoSomethingCommand = new DelegateCommand(DoSomething); 
    } 

    private void DoSomething(object obj) 
    { 
     // TODO: do something 
    } 
} 

如果您還沒有使用的DelegateCommand的實現,都一起來看看它在棱鏡源(或其他地方,也有很多樣品)。

主窗口(XAML中的一部分)

<ItemsControl x:Name="itemsControl" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Button Content="Do Something" Command="{Binding DoSomethingCommand}" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

主窗口(代碼後面)

public partial class MainWindow : Window 
{ 
    private ObservableCollection<CustomObject> _customObjects; 
    public MainWindow() 
    { 
     InitializeComponent(); 
     _customObjects = new ObservableCollection<CustomObject>(); 
     Loaded += MainWindowLoaded; 
    } 

    private void MainWindowLoaded(object sender, RoutedEventArgs e) 
    { 
     itemsControl.ItemsSource = _customObjects; 
     _customObjects.Add(new CustomObject()); 
    } 
} 

就是這樣。每次點擊按鈕時,執行方法DoSomething