Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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
C# 通过PropertyChangedEvent更改UserControl的可见性_C#_Wpf_Xaml_Mvvm - Fatal编程技术网

C# 通过PropertyChangedEvent更改UserControl的可见性

C# 通过PropertyChangedEvent更改UserControl的可见性,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,更新:完整工作示例: 我正在使用属性绑定更改窗口中usercontrol的可见性。随着INotifyPropertyChanged的更改,我通知UI进行更新 我正在使用RelayCommand实现 C# XAML: 既然您将可见性主页与绑定,您应该使用: PropertyChanged(这是新的PropertyChangedEventArgs(“主页”) 通过这种方式,您可以为Home属性调用属性更改事件。此外,\u myHome也不需要成为一个属性。它应该是一个简单的私有字段 有一个名为的库,

更新:完整工作示例:

我正在使用属性绑定更改窗口中usercontrol的可见性。随着INotifyPropertyChanged的更改,我通知UI进行更新

我正在使用RelayCommand实现

C#

XAML:


既然您将可见性
主页
绑定,您应该使用:

PropertyChanged(这是新的PropertyChangedEventArgs(“主页”)

通过这种方式,您可以为
Home
属性调用属性更改事件。此外,
\u myHome
也不需要成为一个属性。它应该是一个简单的私有字段

有一个名为的库,它自动处理所有这些属性更改事件,您可能需要查看它

如果您想手动处理
属性更改
事件,并且正在使用C#6.0(Visual Studio 2015),您可能需要使用:

PropertyChanged(这是新的propertychangedventargs(nameof(Home))


使用上一个代码如果重命名
Home
属性并忘记更改
PropertyChanged
事件中的字符串,它将以静默方式通知失败。但是使用此代码,编译将失败,您必须修复它。

因为您将可见性
主页
绑定,所以您应该使用:

PropertyChanged(这是新的PropertyChangedEventArgs(“主页”)

通过这种方式,您可以为
Home
属性调用属性更改事件。此外,
\u myHome
也不需要成为一个属性。它应该是一个简单的私有字段

有一个名为的库,它自动处理所有这些属性更改事件,您可能需要查看它

如果您想手动处理
属性更改
事件,并且正在使用C#6.0(Visual Studio 2015),您可能需要使用:

PropertyChanged(这是新的propertychangedventargs(nameof(Home))


使用上一个代码如果重命名
Home
属性并忘记更改
PropertyChanged
事件中的字符串,它将以静默方式通知失败。但是有了这段代码,编译将失败,您必须修复它。

您是对的_我的家应该是私人的。我有一个问题,我需要一个定制的主页设置器(发送通知),但如果我在getter of home中返回主页,我会得到一个Innity循环(表示vs),因此我有第二个_myHome。是的,这就是使用它的方式。只有
\u myHome
不需要是属性。您可以将其定义为
private Visibility\u myHome是。福迪是个很棒的图书馆。我极力推荐它。我也可以推荐使用WPF inspector。它是一个独立的应用程序,允许您将其附加到调试应用程序,并检查其中的所有内容。更新inspector中的值,并观察它在UI中的更新。使检测未绑定元素或错误绑定模式更容易。谢谢,我更改了代码和问题。但这并不能解决我的问题。谁能解释这个问题我会和WPF Inspector一起检查我的应用程序,并给你反馈。这个问题还有很多。使用您提供的代码,我可以成功地折叠并显示控件。请提供实际的代码,这样我就可以看到什么是错误的。你是对的_我的家应该是私人的。我有一个问题,我需要一个定制的主页设置器(发送通知),但如果我在getter of home中返回主页,我会得到一个Innity循环(表示vs),因此我有第二个_myHome。是的,这就是使用它的方式。只有
\u myHome
不需要是属性。您可以将其定义为
private Visibility\u myHome是。福迪是个很棒的图书馆。我极力推荐它。我也可以推荐使用WPF inspector。它是一个独立的应用程序,允许您将其附加到调试应用程序,并检查其中的所有内容。更新inspector中的值,并观察它在UI中的更新。使检测未绑定元素或错误绑定模式更容易。谢谢,我更改了代码和问题。但这并不能解决我的问题。谁能解释这个问题我会和WPF Inspector一起检查我的应用程序,并给你反馈。这个问题还有很多。使用您提供的代码,我可以成功地折叠并显示控件。请提供实际的代码,以便我可以看到什么是错误的。
    //ViewModel:
    public class homeViewModel : INotifyPropertyChanged
    {
    public event PropertyChangedEventHandler PropertyChanged;

       private Visibility _Home;
       public Visibility Home
       {
          get { return _Home; }
          set { 
                 if(_Home == value) return;
                 _Home = value;
                 PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Home"));
              }
       }

       public ICommand HideHomeCommand
       {
          get { 
              return new RelayCommand( 
                o => HideUserControl, 
                o => {return Home != Visibility.Collapsed;}
              );
          }
       }
       private void HideUserControl()
       {
          Home = Visibility.Collapse;
       }
       public ICommand ShowHomeCommand
       {
          get { 
              return new RelayCommand( 
                o => ShowUserControl, 
                o => {return Home != Visibility.Visible;}
              );
          }
       }
       private void ShowUserControl()
       {
          Home = Visibility.Visible;
       }
    }
<Window ... >
    <Window.DataContext>
        <vm:homeViewModel />
    </Window.DataContext>
    <StackPanel>
        <Button Content="Show Home" Command="{Binding ShowHomeCommand}" />
        <Button Content="Collapse Home" Command="{Binding HideHomeCommand}" />
        <views:home Visibility="{Binding Home }" /> 
        <!-- home is an usercontrol -->
    </StackPanel>
</Window>