带ViewModel的WPF文本框
我正在尝试为自定义文本框实现ViewModel,这是我第一次尝试实现ViewModel 它是一个文件浏览器应用程序,只有一个带ViewModel的WPF文本框,wpf,mvvm,textbox,viewmodel,Wpf,Mvvm,Textbox,Viewmodel,我正在尝试为自定义文本框实现ViewModel,这是我第一次尝试实现ViewModel 它是一个文件浏览器应用程序,只有一个字符串地址所需(不是集合),其中包含自定义文本框“ExploreAddress”的地址。此自定义文本框包含文本和图像(当前目录的图标,它不是静态的) XAML: <UserControl.DataContext> <l:ExploreAddressViewModel/> </UserControl.DataContext>
字符串地址代码>所需(不是集合),其中包含自定义文本框“ExploreAddress”的地址。
此自定义文本框包含文本和图像(当前目录的图标,它不是静态的)
XAML:
<UserControl.DataContext>
<l:ExploreAddressViewModel/>
</UserControl.DataContext>
<TextBox x:Name="txtAddress" Margin="34,5,32,0" TextWrapping="Wrap"
Text="{Binding Name}" Height="25"
VerticalAlignment="Top" FontWeight="Bold" MinHeight="25" MaxHeight="25">
<TextBox.Background>
<ImageBrush ImageSource="{Binding Image}" Stretch="None"/>
</TextBox.Background>
</TextBox>
实际上我不知道为什么我需要创建一个
我可以把它放在同一件衣服里
ExploreAddressViewModel类
你不需要
你有重复的东西在那里,只是删除该类
此外,属性设置程序必须引发PropertyChanged
事件,如下所示:
public class ExploreAddressViewModel : INotifyPropertyChanged
{
private string _name
public string Name
{
get { return _name; }
set
{
_name = value;
RaisePropertyChanged("Name");
}
}
private ImageSource _image;
public ImageSource Image
{
get { return _image; }
set
{
_image = value;
RaisePropertyChanged("Image");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
我是这样做的,文本框是空的,我用back更新了问题code@murhaf文本框与ViewModel的Name
属性绑定,但您的代码正在分配Text
属性。哪一个是正确的?对不起,我把属性名改为文本,但是我没有在问题中更新它,考虑它的仍然是代码>名称<代码> @ MuHAF,所以你在XAML中也改变了吗?WPF绑定错误可以在那里找到。
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
exploreAddress = (ExploreAddressViewModel)base.DataContext;
exploreAddress.Text = "My Computer";
}
private void GoButton_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(txtAddress.Text);
}
public class ExploreAddressViewModel : INotifyPropertyChanged
{
private string _name
public string Name
{
get { return _name; }
set
{
_name = value;
RaisePropertyChanged("Name");
}
}
private ImageSource _image;
public ImageSource Image
{
get { return _image; }
set
{
_image = value;
RaisePropertyChanged("Image");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}