2010-05-17 88 views
0

我有一個名爲ParameterEditorView的窗口,其中ParameterEditorViewModelDataContext。在ParameterEditorViewModel我有一個列表ParameterViewModel。在ParameterEditorView我有一個ItemsControlItemsSource綁定到 ParameterViewModel名單。我需要ParameterViewModel來引用ParameterView(稍後會詳細介紹)。在ParameterEditorViewResources部分我添加了DataTemplate將視圖傳遞給包含數據模板的視圖模型

<DataTemplate DataType="{x:Type my:ParameterViewModel}" > 
    <my:ParameterView HorizontalAlignment="Left"/> 
</DataTemplate> 

所以,我怎麼能傳遞一個創建以顯示ParameterViewModel它的ParameterView的參考?

我之所以需要在ParameterViewModelParameterView如下: 我有一個TextBoxText屬性綁定到PropertyModelView.Name財產。但是我想在Name爲空或空時顯示默認字符串。我試圖將屬性值設置爲我想要的默認字符串,但在此場景中未設置TextBox.Text。我做這樣的事情:

private string _name; 
public string Name 
{ 
    get { return _name; } 
    set 
    { 
     if (value == null || value.Length == 0) 
      Name = _defaultName; 
     else 
      _name = value; 
    } 
} 

我也試着專門設置TextBox.Text結合模式沒有成功雙向。 我認爲這是防止發生無限循環的防禦機制,但我不確定。 任何在這方面的幫助也將不勝感激。

感謝, 何塞·塔瓦雷斯

回答

1

{Binding } has a FallbackValue, btw.

你的問題,它混淆了我。我假設你的PVM將PV的集合作爲一個公共屬性,並綁定在UI中。另外,我認爲你在混合術語。它的Model-View-ViewModel,其中ViewModel是View的DataContext,Model由ViewModel通過公共屬性公開。聽起來好像你將窗口綁定到ViewModel的集合,他們實際上是Models。這看起來很迂腐,但是讓你的條款正確有助於你研究和提出問題。

另一種解決方案是將Converter與Binback結合添加到FallbackValue中(我必須這樣做,IIRC)。該轉換器將是一個IValueConverter,如果字符串爲null或空,則返回「DependencyProperty.UnsetValue」。我認爲這有時會起作用,因爲TextBox會將綁定屬性設置爲空字符串,而不是null,如果TB是空的。這裏有一個小樣本磨你的哨子(不能保證工作;你需要調試這一點,並調整它):

public class ThisMightWorkConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, 
     object parameter, System.Globalization.CultureInfo culture) 
    { 
     var temp = value as string; 
     if(string.IsNullOrWhiteSpace(temp)) 
      return System.Windows.DependencyProperty.UnsetValue; 
     return temp; 
    } 

    public object ConvertBack(object value, Type targetType, 
     object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value; // you might need to change this 
    } 
} 
+0

嗯,我可能已經不能清楚地表達自己。 我有一個名爲ParameterEditorView的窗口和一個ParameterEditorViewModel。在ParameterEditorView中,我有一個ParameterViewModel的列表。在ParameterEditorView中,我有一個ItemsControl,它的ItemsSource綁定到ParameterEditorViewModel的ParameterViewModel列表中。我還在ParameterEditorView中定義了上面顯示的'DataTemplate'。 綁定工作正常,但我想知道是否可以將ParameterView的引用(即自動創建的)顯示ParameterViewModel以傳遞給ParameterViewModel。 – jpsstavares 2010-05-17 17:21:15

+0

@jps假設ParameterView是一個UserControl。如果你試圖將一大塊用戶界面傳遞給ViewModel或Model,那麼你會做錯某些事情。我認爲說出你的問題並尋求解決方案,而不是走上正確的道路對你有利。 FallbackValue是一個選項。我編輯添加第二個選項。 – Will 2010-05-17 17:31:47

+0

我想這第二個選項是克服這個問題的好選擇。謝謝您的幫助。 – jpsstavares 2010-05-19 09:02:03

相關問題