将视图传递给包含数据模板的视图模型
我有一个名为ParameterEditorView
的窗口,其中ParameterEditorViewModel
为DataContext
。在ParameterEditorViewModel
我有一个列表ParameterViewModel
。在ParameterEditorView
我有一个ItemsControl
其ItemsSource
绑定到 ParameterViewModel
名单。我需要ParameterViewModel
来引用ParameterView(稍后会详细介绍)。在ParameterEditorView
的Resources
部分我添加了DataTemplate
:将视图传递给包含数据模板的视图模型
<DataTemplate DataType="{x:Type my:ParameterViewModel}" >
<my:ParameterView HorizontalAlignment="Left"/>
</DataTemplate>
所以,我怎么能传递一个创建以显示ParameterViewModel
它的ParameterView
的参考?
我之所以需要在ParameterViewModel
的ParameterView
如下: 我有一个TextBox
其Text
属性绑定到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
结合模式没有成功双向。 我认为这是防止发生无限循环的防御机制,但我不确定。 任何在这方面的帮助也将不胜感激。
感谢, 何塞·塔瓦雷斯
{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
}
}
嗯,我可能已经不能清楚地表达自己。 我有一个名为ParameterEditorView的窗口和一个ParameterEditorViewModel。在ParameterEditorView中,我有一个ParameterViewModel的列表。在ParameterEditorView中,我有一个ItemsControl,它的ItemsSource绑定到ParameterEditorViewModel的ParameterViewModel列表中。我还在ParameterEditorView中定义了上面显示的'DataTemplate'。 绑定工作正常,但我想知道是否可以将ParameterView的引用(即自动创建的)显示ParameterViewModel以传递给ParameterViewModel。 – jpsstavares 2010-05-17 17:21:15
@jps假设ParameterView是一个UserControl。如果你试图将一大块用户界面传递给ViewModel或Model,那么你会做错某些事情。我认为说出你的问题并寻求解决方案,而不是走上正确的道路对你有利。 FallbackValue是一个选项。我编辑添加第二个选项。 – Will 2010-05-17 17:31:47
我想这第二个选项是克服这个问题的好选择。谢谢您的帮助。 – jpsstavares 2010-05-19 09:02:03