2013-03-06 31 views
0

我用ProgressBarLabel創建了UserControl如何使用MVVM數據綁定WPF更新多個用戶控件實例?

<Label Content="{Binding ElementName=UserControl, Path=StatusProperty}" Grid.Row="1" Height="28" HorizontalAlignment="Left" Margin="76,0,0,32" Name="lblStatus" VerticalAlignment="Bottom" Grid.RowSpan="2" /> 
<ProgressBar Grid.Row="2" Height="20" HorizontalAlignment="Left" Margin="12,3,0,0" Name="pbCheckProgress" Style="{DynamicResource ProgressBarStyle}" Maximum="{Binding ElementName=UserControl, Path=MaximumProperty}" Minimum="{Binding ElementName=UserControl, Path=MinimumProperty}" Value="{Binding ElementName=UserControl, Path=ValueProperty}" VerticalAlignment="Top" Width="156" /> 

然後,我創建了以下DependencyProperties

// Dependency Properties for labels 
public static readonly DependencyProperty StatusProperty = DependencyProperty.Register("Status", typeof(string), typeof(UserControl1), new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); 

// Dependency Properties for progress bar properties 
public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register("Minimum", typeof(double), typeof(UserControl1), new FrameworkPropertyMetadata(0.0d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); 

public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register("Maximum", typeof(double), typeof(UserControl1), new FrameworkPropertyMetadata(0.0d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); 

public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(double), typeof(UserControl1), new FrameworkPropertyMetadata(0.0d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); 

現在我想在同一個頁面來創建此UserControl的多個實例,並從代碼更新ProgressBar後面使用MVVM。但我無法弄清楚這一點。我是否需要針對UserControl有一個ViewModel,以便每個實例都有自己的ViewModel副本。

有沒有辦法更新頁面ViewModel中的所有實例?

感謝&問候, 巴拉特

+0

ElementName應指向x:Name屬性值,而不是元素類型(UserControl,TextBox等) – Will 2013-03-07 13:44:38

回答

1

如果我理解你正確的,這聽起來像什麼,你要創建一個視圖模型爲這個UserControl,然後有一個視圖模型的多個實例(一個用於在UserControl的每個實例風景)。如果您有一個綁定了多個UserControls的ViewModel,它們都會顯示完全相同的內容。

這聽起來像你已經有一個視圖模型的頁面,這樣你就可以簡單地爲UserControl添加視圖模型作爲頁面視圖模型的屬性,如:

public class PageViewModel : INotifyPropertyChanged 
{ 
    private UCViewModel _ucViewModel; 

    //Other ViewModel Code 

    public UCViewModel UserControlViewModel 
    { 
     get { return _ucViewModel; } 
    } 
} 

哪裏UCViewModel是視圖模型爲您的UserControl。然後,在你的XAML,只需結合於UCViewModel的屬性,就像這樣:

<local:myControl Status="{Binding UserControlViewModel.Status}"... /> 

如果你有UCViewModels的集合,你需要不同的方式處理了一點,但概念仍然是一樣。

+0

感謝您的回答。這正是我想要做的。我有並行運行任務,並試圖通過用戶控制顯示每個任務的進度(UC包含標籤和進度欄)。我會嘗試您的解決方案,然後將其更新爲解決方案。 – Jasti 2013-03-06 23:46:38

相關問題