【发布时间】:2014-08-24 18:47:57
【问题描述】:
我在尝试实现包含视图模型和一些依赖属性的用户控件时遇到问题。
现在,想法是在 UC 上创建一个包含水印属性的文本框,该属性应该允许使用它的开发人员通过 xaml 将本地化字符串从资源文件传递给它。
鉴于 UC 必须处理一些信息,我需要为它创建一个视图模型。
我目前的情况如下:
在用户控件上,我有一个控件,其中包含一个名为“Watermark”的字符串属性,它的值绑定到我的 VM 水印属性:
<Grid x:Name="LayoutRoot" Background="Gray">
<controls:CustomTextBox Watermark="{Binding Path=WatermarkTextValue}"/>
</Grid>
视图模型如下所示:
private string watermarkText;
public string WatermarkTextValue
{
get
{
return watermarkText;
}
set
{
watermarkText = value;
this.OnPropertyChanged(() => this.WatermarkTextValue);
}
}
后面的用户控制代码包含依赖属性,用于将视图模型的水印与资源文件条目绑定,并在构造函数中创建 VM 属性和依赖项之间的绑定:
public partial class SearchFilterUserControl : UserControl
{
public SearchFilterUserControl()
{
InitializeComponent();
this.DataContext = new SearchFilterViewModel();
var viewModelPropertyBinding = new Binding("WatermarkTextValue") { Mode = BindingMode.TwoWay, Source = this.DataContext };
this.SetBinding(WatermarkTextProperty, viewModelPropertyBinding);
}
public string WatermarkText
{
get
{
return (string)this.GetValue(WatermarkTextProperty);
}
set
{
this.SetValue(WatermarkTextProperty, value);
}
}
public static readonly DependencyProperty WatermarkTextProperty =
DependencyProperty.Register("WatermarkText", typeof(string), typeof(SearchFilterUserControl), new PropertyMetadata(string.Empty));
}
这里的主要问题是,从视图中使用 UC 时;我只能看到在 xaml 中硬编码的值,任何其他类型的绑定都不起作用,所以在这两行之外:
<userControls:SearchFilterUserControl WatermarkText="{Binding Path=SearchFilterUserControl_SearchWatermarkText, Source={StaticResource ResourceManagementClientResources}}"/>
<userControls:SearchFilterUserControl WatermarkText="Hardcoded text"/>
我看到一个空文本框和另一个带有“硬编码文本”水印的文本框!
【问题讨论】:
标签: c# silverlight mvvm data-binding dependency-properties