[英]Accessing XAML objects in C# View Model
我在我的 View xaml 代碼中設置了一個網格。 它由一個填充了 64 個矩形和 32 個圖像的網格組成。 我有一個用於圖像的模型類,我想將一些屬性綁定到 XMAL-objects 屬性。 ChessBoardViewModel.cs 中的代碼:
foreach (ChessPiece Piece in ChessPieces)
{
Image Img = ChessBoard.FindName(Piece.Name) as Image;
Binding RowBinding = new Binding("Row");
RowBinding.Source = Piece;
Img.SetBinding(Grid.RowProperty, RowBinding);
Binding ColumnBinding = new Binding("Column");
ColumnBinding.Source = Piece;
Img.SetBinding(Grid.ColumnProperty, ColumnBinding);
}
Chessboard 是包含所有圖像的網格的名稱。
我的計划是將圖像綁定到每個實例的 Row 和 Column 值,以確定它們在游戲中的位置。
問題是由於某種原因我無法訪問 XAML 對象,即使我已經包含了 Views 命名空間。
編輯:
好的,這是我的代碼以及我現在計划如何執行此操作:
<Grid x:Name="ChessBoard">
<Rectangle x:Name="A1" Fill="Black" Grid.Column="1" />
...
...
<Image x:Name="BlkRook1" Source="../Data/BlkRook.png" Grid.Row="{Binding ChessBoardViewModel.ChessPieces[0].Row}" Grid.Column="{Binding ChessPieces[0].Column}"/>
...
</Grid>
和包含我的 ChessPieces 列表的 Viewmodel 像這樣
ChessPieces.Add(new BlkRook() { Name = "BlkRook1", Row = 0, Column = 0 });
我想將 XAML 圖像 Grid.Row 和 Grid.Column 屬性綁定到我的對象的正確實例。 但似乎無法找到實現它的方法。
WPF 是一種以數據為中心的語言,或者至少在以這種方式使用時效果最好。 我的意思是我們操作數據對象,而不是UI 對象。 因此,您永遠不需要訪問您的 UI“板”控件,而是將集合Binding
到該控件並操作集合中的項目。
作為一個簡短的示例,您可以將 64 個項目的集合Bind
到UniformGrid
,其中 32 個項目具有一些使它們顯示為“空”的字段。 例如,您可以為每個項目設置一個string
屬性,用於定義要顯示的圖像,而空方塊在那里可以有一個空string
。
然后,與其嘗試將 UI 項目從Grid
一個位置移動到另一個位置,您只需將集合中的相關項目移動到其新位置……例如,如果您想將一塊棋盤向上移動一格,然后您將它移向集合的開頭 8 個項目,並將那里的空白部分移向結尾的 8 個位置。
在 MVVM 中,建議您使用數據綁定來設置和獲取視圖 (xaml) 和視圖模型(例如 ViewModel.cs 類)之間的數據。
下面是一個例子:
假設您想向 UI 添加一個文本塊並在相應的視圖模型類中訪問它的文本屬性,或者從視圖模型類中設置 UI 中的文本屬性。 所以實現這一點的方法是將 UI 中的 text 屬性綁定到 view-model 類中的一個對象。
這是你如何做到的...
在您的 xaml 視圖中:
<TextBlock text="{binding textValue}"/>
在您的視圖模型類中:
var textValue = do something to set Value of text1
這里發生的情況是,當視圖模型中textValue
的值發生變化時,文本塊的 text 屬性也會更改它的值,並且該更改會反映在 UI 中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.