Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带ViewModel的WPF文本框_Wpf_Mvvm_Textbox_Viewmodel - Fatal编程技术网

带ViewModel的WPF文本框

带ViewModel的WPF文本框,wpf,mvvm,textbox,viewmodel,Wpf,Mvvm,Textbox,Viewmodel,我正在尝试为自定义文本框实现ViewModel,这是我第一次尝试实现ViewModel 它是一个文件浏览器应用程序,只有一个字符串地址所需(不是集合),其中包含自定义文本框“ExploreAddress”的地址。此自定义文本框包含文本和图像(当前目录的图标,它不是静态的) XAML: <UserControl.DataContext> <l:ExploreAddressViewModel/> </UserControl.DataContext>

我正在尝试为自定义文本框实现ViewModel,这是我第一次尝试实现ViewModel

它是一个文件浏览器应用程序,只有一个
字符串地址所需(不是集合),其中包含自定义文本框“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));
        }
    }
}