gpt4 book ai didi

c# - MVVM 属性太多

转载 作者:行者123 更新时间:2023-11-30 12:56:24 25 4
gpt4 key购买 nike

我正在制作一个 WPF 项目并尝试坚持使用 MVVM 模式。它有将近 20 个 UserControl,每个都有大约 10 个我希望能够更改其属性的控件。对于每一个,我都需要能够更改 VisibilityIsEnabled(框架元素属性),然后也更改内容/文本。每个控件至少有 3 个属性。在所有 UserControl 中,有 600 个属性...

我考虑过创建一个 ControlProperties 类,并让每个控件绑定(bind)到正确实例的成员变量/属性的想法。 (例如)

//Code-behind
public class ControlProperties
{
private bool m_isEnabled;
public property IsEnabled
{
get { return m_isEnabled; }
set { m_isEnabled = value; notifyPropertyChanged("IsEnabled"); }
}

ControlProperties() { m_isEnabled = false; }
}

public ControlProperties controlOne;


//XAML
<Button IsEnabled={Binding controlOne.IsEnabled}/>

有没有办法将每个控件的 2+ 个属性组合成更可重用/更容易实现的东西,而不是使用上面的类? (每个控件都需要它自己的“实例”,它们不共享相同的值)上述方法的一个缺点是每个控件都必须单独绑定(bind)所需的属性。首先我必须...但仍然。

如果我遗漏了什么或不清楚什么地方,请提问。

最佳答案

Is there a way to combine the 2+ properties of each control into something more reusable/easier to implement, other than using the above class?

我不确定我是否完全理解您在这里的目的,但您可能需要考虑使用一个或多个附加的依赖属性:https://msdn.microsoft.com/en-us/library/ms749011(v=vs.110).aspx

这样的属性可以在独立类中定义:

namespace WpfApplication1
{
public class SharedProperties
{
public static readonly DependencyProperty IsEnabledProperty = DependencyProperty.RegisterAttached(
"IsEnabled",
typeof(bool),
typeof(SharedProperties),
new FrameworkPropertyMetadata(false));

public static void SetIsEnabled(UIElement element, bool value)
{
element.SetValue(IsEnabledProperty, value);
}
public static bool GetIsEnabled(UIElement element)
{
return (bool)element.GetValue(IsEnabledProperty);
}
}
}

...然后在任何 UIElement 上设置:

<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
mc:Ignorable="d"
Title="Window21" Height="300" Width="300">
<StackPanel>
<UserControl local:SharedProperties.IsEnabled="True" />

<Button x:Name="btn" local:SharedProperties.IsEnabled="{Binding SomeSourceProperty}" />
...

//get:
bool isEnabled = SharedProperties.GetIsEnabled(btn);
//set:
SharedProperties.SetIsEnabled(btn, true);

关于c# - MVVM 属性太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41352639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com