2011-06-24 61 views
0

我正在研究一個WPF應用程序來練習MVVM。我需要有4個網格,全部只有兩列 - 一個用於「顯示」控件(TextBlock/RadioButton帶有字段名稱),另一個用於「值」控制(需要用於表示字段值的任何控件)。WPF綁定Grid上的SharedSizeGroup不工作

在另一個用戶控件中的每個網格,我需要讓它們的所有第一列同步,因此「值」控件將在屏幕上展開,而「顯示」控件將控制該共享大小將具有自動寬度那不會改變。

如果我使用常量名稱設置SharedSizeColumn,所有網格都處於完美同步,但我需要通過與我的視圖模型綁定來設置SharedSizeColumn,因爲包含這些網格的某些用戶控件在選項卡視圖之間共享重複使用的模型,以及跨標籤/視圖模型我不希望網格被同步。 當我使用綁定設置SharedSizeGroup時,所有網格中的2列的行爲就像根本沒有設置SharedSizeGroup一樣,我甚至嘗試使用BindingOperations通過代碼設置綁定,但仍然沒有運氣。

任何想法如何成功綁定SharedSizeGroup或另一個解決方案,以防止SharedSizeGroup在重複使用相同用戶控件的選項卡之間共享?

回答

0

以下是使用SharedSizeGroup進行數據綁定的完整工作示例。

的標記:

<Grid> 
    <StackPanel Grid.IsSharedSizeScope="True" Margin="20"> 
     <Grid HorizontalAlignment="Left"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition SharedSizeGroup="{Binding ColumnA}"/> 
       <ColumnDefinition SharedSizeGroup="{Binding ColumnB}"/> 
      </Grid.ColumnDefinitions> 
      <TextBlock Text="aa" Grid.Column="0" Foreground="Red"/> 
      <TextBlock Text="bbbbbbbb" Grid.Column="1" Foreground="Blue"/> 
     </Grid> 
     <Grid HorizontalAlignment="Left"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition SharedSizeGroup="{Binding ColumnC}"/> 
       <ColumnDefinition SharedSizeGroup="{Binding ColumnD}"/> 
      </Grid.ColumnDefinitions> 
      <TextBlock Text="cccccccc" Grid.Column="0" Foreground="Red"/> 
      <TextBlock Text="dd" Grid.Column="1" Foreground="Blue"/> 
     </Grid> 
    </StackPanel> 
</Grid> 

和後臺代碼:

void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    DataContext = new SharedSizeGroupViewModel 
    { 
     ColumnA = "group1", 
     ColumnB = "group2", 
     ColumnC = "group1", 
     ColumnD = "group2", 
    }; 
} 

和原始視圖模型:

public class SharedSizeGroupViewModel 
{ 
    public string ColumnA { get; set; } 
    public string ColumnB { get; set; } 
    public string ColumnC { get; set; } 
    public string ColumnD { get; set; } 
} 

,這是什麼樣子:

SharedSizeGroup Demo

其中顯示了紅色和藍色的列排隊。